﻿namespace Schnorrkel
{
    using System;
    using Schnorrkel.Ristretto;
    using Schnorrkel.Scalars;
    using static Schnorrkel.Ristretto.EdwardsBasepointTable;

    public class ConstantTimeEq
    {
        public static bool CtEq(EdwardsPoint a, EdwardsPoint b)
        {
            // We would like to check that the point (X/Z, Y/Z) is equal to
            // the point (X'/Z', Y'/Z') without converting into affine
            // coordinates (x, y) and (x', y'), which requires two inversions.
            // We have that X = xZ and X' = x'Z'. Thus, x = x' is equivalent to
            // (xZ)Z' = (x'Z')Z, and similarly for the y-coordinate.

            //(&self.X * &other.Z).ct_eq(&(&other.X * &self.Z))
            //    & (&self.Y * &other.Z).ct_eq(&(&other.Y * &self.Z))

            var c1 = a.X.Mul(b.Z);
            var c2 = b.X.Mul(a.Z);

            var c3 = a.Y.Mul(b.Z);
            var c4 = b.Y.Mul(a.Z);

            return c1.Equals(c2) && c3.Equals(c4);
        }
    }

    internal static class Consts
    {
        /// `L` * `LFACTOR` = -1 (mod 2^52)
        public const ulong LFACTOR = 0x51da312547e1b;

        /// `R` = R % L where R = 2^260
        public static Scalar52 R = new Scalar52(new ulong[] { 0x000f48bd6721e6ed, 0x0003bab5ac67e45a, 0x000fffffeb35e51b, 0x000fffffffffffff, 0x00000fffffffffff });

        /// `RR` = (R^2) % L where R = 2^260
        public static Scalar52 RR = new Scalar52(new ulong[] { 0x0009d265e952d13b, 0x000d63c715bea69f, 0x0005be65cb687604, 0x0003dceec73d217f, 0x000009411b7c309a });

        /// `L` is the order of base point, i.e. 2^252 + 27742317777372353535851937790883648493
        public static Scalar52 L = new Scalar52(new ulong[] { 0x0002631a5cf5d3ed, 0x000dea2f79cd6581, 0x000000000014def9, 0x0000000000000000, 0x0000100000000000 });

        /// Edwards `2*d` value, equal to `2*(-121665/121666) mod p`.
        public static FieldElement51 EDWARDS_D2 = new FieldElement51 { _data = new ulong[] { 1859910466990425, 932731440258426, 1072319116312658, 1815898335770999, 633789495995903 } };

        public static FieldElement51 EDWARDS_D = new FieldElement51(929955233495203, 466365720129213, 1662059464998953, 2033849074728123, 1442794654840575);

        public static EdwardsPoint ED25519_BASEPOINT_POINT = new EdwardsPoint
        {
            X = new FieldElement51 { _data = new ulong[] { 1738742601995546, 1146398526822698, 2070867633025821, 562264141797630, 587772402128613 } },
            Y = new FieldElement51 { _data = new ulong[] { 1801439850948184, 1351079888211148, 450359962737049, 900719925474099, 1801439850948198 } },
            Z = new FieldElement51 { _data = new ulong[] { 1, 0, 0, 0, 0 } },
            T = new FieldElement51 { _data = new ulong[] { 1841354044333475, 16398895984059, 755974180946558, 900171276175154, 1821297809914039 } }
        };

        public static EdwardsPoint ED25519_BASEPOINT_TABLE = new EdwardsPoint
        {
            X = new FieldElement51 { _data = new ulong[] { 52811034, 25909283, 16144682, 17082669, 27570973, 30858332, 40966398, 8378388, 20764389, 8758491 } },
            Y = new FieldElement51 { _data = new ulong[] { 40265304, 26843545, 13421772, 20132659, 26843545, 6710886, 53687091, 13421772, 40265318, 26843545 } },
            Z = new FieldElement51 { _data = new ulong[] { 1, 0, 0, 0, 0, 0, 0, 0, 0, 0 } },
            T = new FieldElement51 { _data = new ulong[] { 28827043, 27438313, 39759291, 244362, 8635006, 11264893, 19351346, 13413597, 16611511, 27139452 } }
        };

        /// Precomputed value of one of the square roots of -1 (mod p)
        public static FieldElement51 SQRT_M1 = new FieldElement51 { _data = new ulong[] { 1718705420411056, 234908883556509, 2233514472574048, 2117202627021982, 765476049583133 } };

        /// `= 1/sqrt(a-d)`, where `a = -1 (mod p)`, `d` are the Edwards curve parameters.
        public static FieldElement51 INVSQRT_A_MINUS_D = new FieldElement51
        {
            _data = new ulong[] {
            278908739862762, 821645201101625, 8113234426968, 1777959178193151, 2118520810568447 }
        };

        public const int SIGNATURE_LENGTH = 64;


        public static LookupTable AFFINE_ODD_MULTIPLES_OF_BASEPOINT =       
            new LookupTable
            {
                affineNielsPoints = new AffineNielsPoint[] {
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3540182452943730, 2497478415033846, 2521227595762870, 1462984067271729, 2389212253076811),
                        Y_minus_X = new FieldElement51(62697248952638, 204681361388450, 631292143396476, 338455783676468, 1213667448819585),
                        XY2d = new FieldElement51(301289933810280, 1259582250014073, 1422107436869536, 796239922652654, 1953934009299142)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1601611775252272, 1720807796594148, 1132070835939856, 3512254832574799, 2147779492816910),
                        Y_minus_X = new FieldElement51(316559037616741, 2177824224946892, 1459442586438991, 1461528397712656, 751590696113597),
                        XY2d = new FieldElement51(1850748884277385, 1200145853858453, 1068094770532492, 672251375690438, 1586055907191707)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(769950342298400, 2384754244604994, 3095885746880802, 3225892188161580, 2977876099231263),
                        Y_minus_X = new FieldElement51(425251763115706, 608463272472562, 442562545713235, 837766094556764, 374555092627893),
                        XY2d = new FieldElement51(1086255230780037, 274979815921559, 1960002765731872, 929474102396301, 1190409889297339)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2916800678241215, 2065379846933858, 2622030924071124, 2602788184473875, 1233371373142984),
                        Y_minus_X = new FieldElement51(2019367628972465, 676711900706637, 110710997811333, 1108646842542025, 517791959672113),
                        XY2d = new FieldElement51(965130719900578, 247011430587952, 526356006571389, 91986625355052, 2157223321444601)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1802695059464988, 1664899123557221, 2845359304426105, 2160434469266658, 3179370264440279),
                        Y_minus_X = new FieldElement51(1725674970513508, 1933645953859181, 1542344539275782, 1767788773573747, 1297447965928905),
                        XY2d = new FieldElement51(1381809363726107, 1430341051343062, 2061843536018959, 1551778050872521, 2036394857967624)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(4222693909998302, 2779866139518454, 1619374932191226, 2207306624415883, 1169170329061080),
                        Y_minus_X = new FieldElement51(2070390218572616, 1458919061857835, 624171843017421, 1055332792707765, 433987520732508),
                        XY2d = new FieldElement51(893653801273833, 1168026499324677, 1242553501121234, 1306366254304474, 1086752658510815)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2465253816303469, 3191571337672685, 1159882208056013, 2569188183312765, 621213314200686),
                        Y_minus_X = new FieldElement51(1971678598905747, 338026507889165, 762398079972271, 655096486107477, 42299032696322),
                        XY2d = new FieldElement51(177130678690680, 1754759263300204, 1864311296286618, 1180675631479880, 1292726903152791)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1913163449625248, 2712579013977241, 2193883288642313, 1008900146920800, 1721983679009502),
                        Y_minus_X = new FieldElement51(1070401523076875, 1272492007800961, 1910153608563310, 2075579521696771, 1191169788841221),
                        XY2d = new FieldElement51(692896803108118, 500174642072499, 2068223309439677, 1162190621851337, 1426986007309901)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1819621230288238, 2735700366193240, 1755134670739586, 3080648199451191, 4172807995775876),
                        Y_minus_X = new FieldElement51(992069868904071, 799011518185730, 1777586403832768, 1134820506145684, 1999461475558530),
                        XY2d = new FieldElement51(425204543703124, 2040469794090382, 1651690622153809, 1500530168597569, 1253908377065966)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2105824306960939, 1387520302709358, 3633176580451016, 2211816663841753, 1629085891776489),
                        Y_minus_X = new FieldElement51(1485201376284999, 1022406647424656, 504181009209019, 962621520820995, 590876713147230),
                        XY2d = new FieldElement51(265873406365287, 1192742653492898, 88553098803050, 525037770869640, 1266933811251234)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3552316659826612, 1254279525791875, 1609927932077699, 3578654071679972, 3750681296069893),
                        Y_minus_X = new FieldElement51(37186803519861, 1404297334376301, 578519728836650, 1740727951192592, 2095534282477028),
                        XY2d = new FieldElement51(833234263154399, 2023862470013762, 1854137933982069, 853924318090959, 1589812702805850)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3679150557957763, 1319179453661745, 497496853611112, 2665464286942351, 1208137952365560),
                        Y_minus_X = new FieldElement51(1654513078530905, 907489875842908, 126098711296368, 1726320004173677, 28269495058173),
                        XY2d = new FieldElement51(114436686957443, 532739313025996, 115428841215897, 2191499400074366, 370280402676434)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1111146849833253, 2016430049079759, 1860522747477948, 3537164738290194, 4137142824844184),
                        Y_minus_X = new FieldElement51(429069864577128, 975327637149449, 237881983565075, 1654761232378630, 2122527599091807),
                        XY2d = new FieldElement51(2093793463548278, 754827233241879, 1420389751719629, 1829952782588138, 2011865756773717)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(676293365438898, 2850296017886344, 1205350322490195, 2763699392265669, 2133931188538142),
                        Y_minus_X = new FieldElement51(48340340349120, 1299261101494832, 1137329686775218, 1534848106674340, 1351662218216799),
                        XY2d = new FieldElement51(1904520614137939, 1590301001714014, 215781420985270, 2043534301034629, 1970888949300424)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2365217962409710, 2061307169694064, 1887478590157603, 2169639621284316, 2373810867477200),
                        Y_minus_X = new FieldElement51(1020052624656948, 1260412094216707, 366721640607121, 585331442306596, 345876457758061),
                        XY2d = new FieldElement51(975390299880933, 1066555195234642, 12651997758352, 1184252205433068, 1058378155074223)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1431537716602643, 2024827957433813, 3746434518400495, 1087794891033550, 2156817571680455),
                        Y_minus_X = new FieldElement51(929288033346881, 255179964546973, 711057989588035, 208899572612840, 185348357387383),
                        XY2d = new FieldElement51(823689746424808, 47266130989546, 209403309368097, 1100966895202707, 710792075292719)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2311213117823762, 3296668540922318, 2004276520649823, 1861500579441125, 3148029033359833),
                        Y_minus_X = new FieldElement51(1563693677475261, 1843782073741194, 1950700654453170, 911540858113949, 2085151496302359),
                        XY2d = new FieldElement51(1427880892005482, 106216431121745, 42608394782284, 1217295886989793, 1514235272796882)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3544335535746750, 2367994491347456, 2567261456502612, 1854058085060971, 2263545563461076),
                        Y_minus_X = new FieldElement51(787426011300053, 2105981035769060, 1130476291127206, 1748659348100075, 53470983013756),
                        XY2d = new FieldElement51(553548273865386, 5927805718390, 65184587381926, 633576679686953, 576048559439973)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(993787326657446, 3868807161609258, 1615796046728943, 2514644292681953, 2059021068660907),
                        Y_minus_X = new FieldElement51(251010270518880, 1681684095763484, 1521949356387564, 431593457045116, 1855308922422910),
                        XY2d = new FieldElement51(618490909691959, 1257497595618257, 202952467594088, 35577762721238, 1494883566841973)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1673474571932262, 2409784519770613, 2636095316260487, 2761112584601925, 3333713288149876),
                        Y_minus_X = new FieldElement51(1600640202645197, 1019569075331823, 1041916487915822, 1680448171313267, 2126903137527901),
                        XY2d = new FieldElement51(894964745143659, 106116880092678, 1009869382959477, 317866368542032, 1986983122763912)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1765281781276487, 2863247187455184, 2589075472439062, 1386435905543054, 2182338478845320),
                        Y_minus_X = new FieldElement51(1144730936996693, 2213315231278180, 1489676672185125, 665039429138074, 1131283313040268),
                        XY2d = new FieldElement51(2004734176670602, 1738311085075235, 418866995976618, 1050782508034394, 577747313404652)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2185209688340293, 1309276076461009, 2514740038571278, 3994889904012999, 3018098826231021),
                        Y_minus_X = new FieldElement51(1405936970888515, 1754621155316654, 1211862168554999, 1813045702919083, 997853418197172),
                        XY2d = new FieldElement51(82037622045021, 1646398333621944, 613095452763466, 1312329542583705, 81014679202721)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2389287991277873, 403851022333257, 1597473361477193, 2953351602509212, 2135174663049062),
                        Y_minus_X = new FieldElement51(1826548187201150, 302299893734126, 1475477168615781, 842617616347376, 1438600873676130),
                        XY2d = new FieldElement51(663049852468609, 1649295727846569, 1048009692742781, 628866177992421, 1914360327429204)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1795645928096646, 306878154408959, 2924901319092394, 2801261341654799, 1653782432983523),
                        Y_minus_X = new FieldElement51(2077597317438627, 212642017882064, 674844477518888, 875487498687554, 2060550250171182),
                        XY2d = new FieldElement51(1420448018683809, 1032663994771382, 1341927003385267, 1340360916546159, 1988547473895228)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1082660122598844, 2545055705583789, 3888919679589007, 1670283344995811, 3403239134794618),
                        Y_minus_X = new FieldElement51(90430593339788, 1838338032241275, 571293238480915, 1639938867416883, 257378872001111),
                        XY2d = new FieldElement51(1528535658865034, 1516636853043960, 787000569996728, 1464531394704506, 1684822625133795)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(811329918113934, 2783463529007378, 1769095754634835, 2970819621866866, 881037178164325),
                        Y_minus_X = new FieldElement51(1784566501964517, 433890943689325, 1186055625589419, 1496077405487512, 1731807117886548),
                        XY2d = new FieldElement51(424909811816304, 1355993963741797, 409606483251841, 455665350637068, 1617009023642808)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2478728492077816, 2780289048655501, 2328687177473769, 4107341333582032, 1316147724308250),
                        Y_minus_X = new FieldElement51(1617420574301156, 1741273341070467, 667135503486508, 2100436564640123, 1032223920000865),
                        XY2d = new FieldElement51(1753947659404033, 247279202390193, 1819288880178945, 737334285670249, 1037873664856104)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1762568490530034, 673742465299012, 2054571050635888, 2040165159255111, 3040123733327257),
                        Y_minus_X = new FieldElement51(1627187989987422, 1686331580821752, 1309895873498183, 719718719104086, 300063199808722),
                        XY2d = new FieldElement51(238176707016164, 1440454788877048, 203336037573144, 1437789888677072, 101522256664211)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1895216760098480, 1934324337975022, 3677350688973167, 2536415965456176, 714678003308640),
                        Y_minus_X = new FieldElement51(508185358728815, 1691320535341855, 2168887448239256, 1035124393070661, 1936603999698584),
                        XY2d = new FieldElement51(390562831571647, 1390223890708972, 1383183990676371, 435998174196410, 1882086414390730)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3747620842612921, 2081794785291195, 3284594056262745, 2090090346797895, 2581692978935809),
                        Y_minus_X = new FieldElement51(244144781251265, 1290834426417077, 1888701171101942, 1233922456644870, 241117402207491),
                        XY2d = new FieldElement51(1266169390045455, 1148042013187970, 878921907853942, 1815738019658093, 908920199341621)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2521768507305118, 953557056811112, 2015863732865770, 1358382511861315, 2835421647899992),
                        Y_minus_X = new FieldElement51(2239837206240498, 330928973149665, 422268062913642, 1481280019493032, 619879520439841),
                        XY2d = new FieldElement51(1360166735366017, 1770556573948510, 1395061284191031, 1814003148068126, 522781147076884)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2611794802645686, 707234844948070, 1314059396506491, 2919250341703934, 2161831667832785),
                        Y_minus_X = new FieldElement51(934831784182383, 433734253968318, 1660867106725771, 1968393082772831, 873946300968490),
                        XY2d = new FieldElement51(26306827827554, 430884999378685, 1504310424376419, 1761358720837522, 542195685418530)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1762131062631725, 3123952634417535, 3619918390837537, 2909990877347294, 1411594230004385),
                        Y_minus_X = new FieldElement51(538272372224622, 1425714779586199, 588313661410172, 1497062084392578, 1602174047128512),
                        XY2d = new FieldElement51(907490361939255, 1963620338391363, 626927432296975, 1250748516081414, 959901171882527)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1335066153744413, 2887804660779657, 2653073855954038, 2765226981667422, 938831784476763),
                        Y_minus_X = new FieldElement51(296699434737224, 2047543711075683, 2076451038937139, 227783599906901, 1602062110967627),
                        XY2d = new FieldElement51(1574834773194203, 1384279952062839, 393652417255803, 2166968242848859, 1552890441390820)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1619646774410947, 1576090644023562, 3035228391320965, 1735328519940543, 2355324535937066),
                        Y_minus_X = new FieldElement51(1024074573633446, 957088456885874, 1690425531356997, 2102187380180052, 1082544623222033),
                        XY2d = new FieldElement51(1871906170635853, 1719383891167200, 1584032250247862, 823764804192117, 2244048510084261)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(642147846489775, 3334304977145699, 305205716788147, 2589176626729533, 2224680511484174),
                        Y_minus_X = new FieldElement51(1734162377166545, 260713621840346, 157174591942595, 952544272517991, 222818702471733),
                        XY2d = new FieldElement51(1213115494182947, 286778704335711, 2130189536016490, 308349182281342, 1217623948685491)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3360052266973635, 1843486583624091, 1561693837124349, 1084041964025479, 1866270922024009),
                        Y_minus_X = new FieldElement51(460705465481210, 1968151453817859, 497005926994844, 625618055866751, 2176893440866887),
                        XY2d = new FieldElement51(1655800250476757, 2036588542300609, 666447448675243, 1615721995750683, 1508669225186765)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2245948203759141, 1058306669699396, 1452898014240582, 3961024141962768, 1633235287338608),
                        Y_minus_X = new FieldElement51(986647273684279, 1507266907811370, 1260572633649005, 2071672342077446, 695976026010857),
                        XY2d = new FieldElement51(1312356620823495, 1635278548098567, 901946076841033, 585120475533168, 1240667113237384)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2313723935779695, 1506054666773895, 996040223525031, 636592914999692, 1497801917020297),
                        Y_minus_X = new FieldElement51(292042016419794, 1158932298133044, 2062611870323738, 1946058478962569, 1749165808126286),
                        XY2d = new FieldElement51(654683942212830, 1526897351349087, 2006818439922838, 2194919327350361, 1451960776874416)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3015041017808905, 2951823141773809, 2584865668253675, 2508192032998563, 2582137700042019),
                        Y_minus_X = new FieldElement51(1628123495344283, 2072923641214546, 1647225812023982, 855655925244679, 1758126430071140),
                        XY2d = new FieldElement51(1615895096489599, 275295258643784, 937665541219916, 1313496726746346, 1186468946422626)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1603070202850694, 2072127623773242, 1692648737212158, 2493373404187852, 1248948672117105),
                        Y_minus_X = new FieldElement51(11167836031898, 596565174397990, 2196351068723859, 314744641791907, 1102014997250781),
                        XY2d = new FieldElement51(1409047922401191, 69960384467966, 688103515547600, 1309746102488044, 150292892873778)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1986083055103168, 691715819340300, 1361811659746933, 3459052030333434, 1063594696046061),
                        Y_minus_X = new FieldElement51(1201987338414749, 2198784582460616, 1203335513981498, 489243077045066, 2205278143582433),
                        XY2d = new FieldElement51(2034744376624534, 2077387101466387, 148448542974969, 1502697574577258, 473186584705655)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(472016956315960, 720786972252993, 2840633661190043, 3150798753357827, 2816563335499153),
                        Y_minus_X = new FieldElement51(253464247569755, 168314237403057, 511780806170295, 1058862316549135, 1646858476817137),
                        XY2d = new FieldElement51(595092995922219, 1491311840717691, 291581784452778, 1569186646367854, 1031385061400544)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3483137021572755, 1526955102024322, 2778006642704458, 457549634924205, 1097420237736736),
                        Y_minus_X = new FieldElement51(1246991699537710, 81367319519439, 530844036072196, 163656863755855, 1950742455979290),
                        XY2d = new FieldElement51(191532664076407, 539378506082089, 1021612562876554, 1026603384732632, 1773368780410653)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(4144620731387879, 590179521333342, 4034023318016108, 2255745030335426, 2699746851701250),
                        Y_minus_X = new FieldElement51(2206599697359952, 553895797384417, 181689161933786, 1153123447919104, 778568064152659),
                        XY2d = new FieldElement51(1706307000059211, 1885601289314487, 889758608505788, 550131729999853, 1006862664714268)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3210197754285058, 2048500453422630, 3403309827888207, 927154428508963, 4199813798872019),
                        Y_minus_X = new FieldElement51(992058915374933, 476120535358775, 1973648780784340, 2025282643598818, 2182318983793230),
                        XY2d = new FieldElement51(1343440812005821, 1316045839091795, 1884951299078063, 1765919609219175, 2197567554627988)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3129247779382818, 4415026969054274, 1900265885969643, 1528796215447059, 2172730393748688),
                        Y_minus_X = new FieldElement51(1773355092297603, 64654329538271, 1332124041660957, 748492100858001, 895500006200535),
                        XY2d = new FieldElement51(2000840647851980, 546565968824914, 420633283457524, 195470736374507, 1958689297569520)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(743138980705446, 3411117504637167, 2591389959690621, 2380042066577202, 3022267940115114),
                        Y_minus_X = new FieldElement51(165947002229363, 115186103724967, 1068573292121517, 1842565776920938, 1969395681111987),
                        XY2d = new FieldElement51(553322266190633, 234265665613185, 484544650202821, 1238773526575826, 2017991917953668)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2581954631514051, 1245093644265357, 3537016673825374, 1834216551713857, 923978372152807),
                        Y_minus_X = new FieldElement51(1855378315339552, 890045579230758, 1764718173975590, 197904186055854, 1718129022310327),
                        XY2d = new FieldElement51(1278162928734862, 1894118254109862, 987503995465517, 177406744098996, 781538103127693)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1996603431230215, 1191888797552937, 1207440075928499, 2765853449051137, 2525314961343288),
                        Y_minus_X = new FieldElement51(808903879370889, 990820108751280, 1084429472258867, 1078562781312589, 254514692695625),
                        XY2d = new FieldElement51(615855140068469, 586046731175395, 693470779212674, 1964537100203868, 1350330550265229)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3344544372023708, 720386671449874, 2480841360702110, 2036034126860286, 2015744690201389),
                        Y_minus_X = new FieldElement51(1337446193390478, 1984110761311871, 746489405020285, 407347127604128, 1740475330360596),
                        XY2d = new FieldElement51(140840424783613, 1063284623568331, 1136446106453878, 372042229029799, 442607248430694)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2330781679120937, 376801425148230, 2032603686676107, 1488926293635130, 1317278311532959),
                        Y_minus_X = new FieldElement51(1290116731380016, 2166899563471713, 831997001838078, 870954980505220, 2108537278055823),
                        XY2d = new FieldElement51(1912719171026343, 846194720551034, 2043988124740726, 993234269653961, 421229796383281)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2651184584992902, 2775702557638963, 2539786009779572, 2575974880015305, 2122619079836732),
                        Y_minus_X = new FieldElement51(1154054290132562, 931753998725577, 1647742001778052, 865765466488226, 1083816107290025),
                        XY2d = new FieldElement51(986341121095108, 1522330369638573, 1990880546211047, 501525962272123, 198539304862139)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1496414019192687, 3991034436173951, 3380311659062196, 2854747485359158, 3346958036643152),
                        Y_minus_X = new FieldElement51(805612068303425, 1891790027761335, 1587008567571549, 722120737390201, 378156757163816),
                        XY2d = new FieldElement51(1588994517921951, 977362751042302, 1329302387067714, 2069348224564088, 1586007159625211)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2490539421551682, 1985699850375015, 2331762317128172, 4145097393776678, 2521049460190674),
                        Y_minus_X = new FieldElement51(615817553313996, 2245962768078178, 482564324326173, 2101336843140780, 1240914880829407),
                        XY2d = new FieldElement51(1438242482238189, 874267817785463, 1620810389770625, 866155221338671, 1040426546798301)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(2403083624110300, 2548561409802975, 2492699136535911, 2358289519456539, 3203964320363148),
                        Y_minus_X = new FieldElement51(1913986535403097, 1977163223054199, 1972905914623196, 1650122133472502, 1905849310819035),
                        XY2d = new FieldElement51(858174816360838, 614595356564037, 1099584959044836, 636998087084906, 1070393269058348)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3666695924830668, 3585640662737501, 2372994528684236, 2628565977288995, 3482812783469694),
                        Y_minus_X = new FieldElement51(1994161359147952, 2198039369802658, 62790022842537, 1522306785848169, 951223194802833),
                        XY2d = new FieldElement51(852296621440717, 431889737774209, 370755457746189, 437604073958073, 627857326892757)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1794955764684156, 2586904290013612, 1322647643615887, 856117964085888, 2652432778663153),
                        Y_minus_X = new FieldElement51(933592377399646, 78031722952813, 926049890685253, 1471649501316246, 33789909190376),
                        XY2d = new FieldElement51(1479319468832059, 203906207621608, 659828362330083, 44358398435755, 1273573524210803)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1592342143350813, 3227219208247713, 2345240352078765, 2577750109932929, 2933512841197243),
                        Y_minus_X = new FieldElement51(2184946892642995, 1517382324576002, 1557940277419806, 2170635134813213, 747314658627002),
                        XY2d = new FieldElement51(1823193620577742, 1135817878516419, 1731253819308581, 1031652967267804, 2123506616999453)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1346190246005805, 2052692552023851, 1718128041785940, 2491557332978474, 3474370880388305),
                        Y_minus_X = new FieldElement51(424776012994573, 281050757243423, 626466040846420, 990194703866532, 38571969885982),
                        XY2d = new FieldElement51(192408346595466, 1054889725292349, 584097975693004, 1447909807397749, 2134645004369136)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3169895788615063, 3503097743181446, 601598510029975, 1422812237223371, 2121009661378329),
                        Y_minus_X = new FieldElement51(1603348391996783, 2066143816131699, 1789627290363958, 2145705961178118, 1985578641438222),
                        XY2d = new FieldElement51(352633958653380, 856927627345554, 793925083122702, 93551575767286, 1222010153634215)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1756866499986349, 911731956999969, 2707505543214075, 4006920335263786, 822501008147910),
                        Y_minus_X = new FieldElement51(1094036422864347, 1897208881572508, 1503607738246960, 1901060196071406, 294068411105729),
                        XY2d = new FieldElement51(587776484399576, 1116861711228807, 343398777436088, 936544065763093, 1643746750211060)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(3477749685790410, 267997399528836, 2953780922004404, 3252368924080907, 3787792887348381),
                        Y_minus_X = new FieldElement51(2042368155872443, 41662387210459, 1676313264498480, 1333968523426810, 1765708383352310),
                        XY2d = new FieldElement51(1453394896690938, 1585795827439909, 1469309456804303, 1294645324464404, 2042954198665899)
                    },
                    new AffineNielsPoint
                    {
                        Y_plus_X = new FieldElement51(1810069207599881, 1358344669503239, 1989371257548167, 2316270051121225, 3019675451276507),
                        Y_minus_X = new FieldElement51(1866114438287676, 1663420339568364, 1437691317033088, 538298302628038, 1212711449614363),
                        XY2d = new FieldElement51(1769235035677897, 1562012115317882, 31277513664750, 536198657928416, 1976134212537183)
                    }

                }
            };

        public static EdwardsBasepointTable ED25519_BASEPOINT_TABLE_INNER = new EdwardsBasepointTable
        {
            lt = new LookupTable[] {
                new LookupTable {
                    affineNielsPoints = new AffineNielsPoint[] {

                new AffineNielsPoint
                    {
                    Y_plus_X = new FieldElement51(3540182452943730, 2497478415033846, 2521227595762870, 1462984067271729, 2389212253076811),
                    Y_minus_X = new FieldElement51(62697248952638, 204681361388450, 631292143396476, 338455783676468, 1213667448819585),
                    XY2d = new FieldElement51(301289933810280, 1259582250014073, 1422107436869536, 796239922652654, 1953934009299142)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(3632771708514775, 790832306631235, 2067202295274102, 1995808275510000, 1566530869037010),
                    Y_minus_X = new FieldElement51(463307831301544, 432984605774163, 1610641361907204, 750899048855000, 1894842303421586),
                    XY2d = new FieldElement51(748439484463711, 1033211726465151, 1396005112841647, 1611506220286469, 1972177495910992)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(1601611775252272, 1720807796594148, 1132070835939856, 3512254832574799, 2147779492816910),
                    Y_minus_X = new FieldElement51(316559037616741, 2177824224946892, 1459442586438991, 1461528397712656, 751590696113597),
                    XY2d = new FieldElement51(1850748884277385, 1200145853858453, 1068094770532492, 672251375690438, 1586055907191707)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(934282339813791, 1846903124198670, 1172395437954843, 1007037127761661, 1830588347719256),
                    Y_minus_X = new FieldElement51(1694390458783935, 1735906047636159, 705069562067493, 648033061693059, 696214010414170),
                    XY2d = new FieldElement51(1121406372216585, 192876649532226, 190294192191717, 1994165897297032, 2245000007398739)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(769950342298400, 2384754244604994, 3095885746880802, 3225892188161580, 2977876099231263),
                    Y_minus_X = new FieldElement51(425251763115706, 608463272472562, 442562545713235, 837766094556764, 374555092627893),
                    XY2d = new FieldElement51(1086255230780037, 274979815921559, 1960002765731872, 929474102396301, 1190409889297339)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(1388594989461809, 316767091099457, 2646098655878230, 1230079486801004, 1440737038838979),
                    Y_minus_X = new FieldElement51(7380825640100, 146210432690483, 304903576448906, 1198869323871120, 997689833219095),
                    XY2d = new FieldElement51(1181317918772081, 114573476638901, 262805072233344, 265712217171332, 294181933805782)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(2916800678241215, 2065379846933858, 2622030924071124, 2602788184473875, 1233371373142984),
                    Y_minus_X = new FieldElement51(2019367628972465, 676711900706637, 110710997811333, 1108646842542025, 517791959672113),
                    XY2d = new FieldElement51(965130719900578, 247011430587952, 526356006571389, 91986625355052, 2157223321444601)
                }, new AffineNielsPoint{
                    Y_plus_X = new FieldElement51(4320419353804412, 4218074731744053, 957728544705548, 729906502578991, 2411634706750414),
                    Y_minus_X = new FieldElement51(2073601412052185, 31021124762708, 264500969797082, 248034690651703, 1030252227928288),
                    XY2d = new FieldElement51(551790716293402, 1989538725166328, 801169423371717, 2052451893578887, 678432056995012)
                } } },
                new LookupTable {
                    affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(1368953770187805, 3042147450398169, 2689308289352409, 2142576377050579, 1932081720066286),
                    Y_minus_X = new FieldElement51(953638594433374, 1092333936795051, 1419774766716690, 805677984380077, 859228993502513),
                    XY2d = new FieldElement51(1200766035879111, 20142053207432, 1465634435977050, 1645256912097844, 295121984874596)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(1735718747031538, 1248237894295956, 1204753118328107, 976066523550493, 2317743583219840),
                    Y_minus_X = new FieldElement51(1060098822528990, 1586825862073490, 212301317240126, 1975302711403555, 666724059764335),
                    XY2d = new FieldElement51(1091990273418756, 1572899409348578, 80968014455247, 306009358661350, 1520450739132526)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(3732317023121341, 1511153322193951, 3496143672676420, 2556587964178488, 2620936670181690),
                    Y_minus_X = new FieldElement51(2151330273626164, 762045184746182, 1688074332551515, 823046109005759, 907602769079491),
                    XY2d = new FieldElement51(2047386910586836, 168470092900250, 1552838872594810, 340951180073789, 360819374702533)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(1982622644432037, 2014393600336956, 2380709022489462, 3869592437614438, 2357094095599062),
                    Y_minus_X = new FieldElement51(980234343912898, 1712256739246056, 588935272190264, 204298813091998, 841798321043288),
                    XY2d = new FieldElement51(197561292938973, 454817274782871, 1963754960082318, 2113372252160468, 971377527342673)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(2416499262514576, 2254927265442919, 3451304785234000, 1766155447043651, 1899238924683527),
                    Y_minus_X = new FieldElement51(732262946680281, 1674412764227063, 2182456405662809, 1350894754474250, 558458873295247),
                    XY2d = new FieldElement51(2103305098582922, 1960809151316468, 715134605001343, 1454892949167181, 40827143824949)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(1239289043050193, 1744654158124578, 758702410031698, 4048562808759936, 2253402870349013),
                    Y_minus_X = new FieldElement51(2232056027107988, 987343914584615, 2115594492994461, 1819598072792159, 1119305654014850),
                    XY2d = new FieldElement51(320153677847348, 939613871605645, 641883205761567, 1930009789398224, 329165806634126)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(3232730304159378, 1242488692177892, 1251446316964684, 1086618677993530, 1961430968465772),
                    Y_minus_X = new FieldElement51(276821765317453, 1536835591188030, 1305212741412361, 61473904210175, 2051377036983058),
                    XY2d = new FieldElement51(833449923882501, 1750270368490475, 1123347002068295, 185477424765687, 278090826653186)
                }, new AffineNielsPoint {
                    Y_plus_X = new FieldElement51(794524995833413, 1849907304548286, 2305148486158393, 1272368559505216, 1147304168324779),
                    Y_minus_X = new FieldElement51(1504846112759364, 1203096289004681, 562139421471418, 274333017451844, 1284344053775441),
                    XY2d = new FieldElement51(483048732424432, 2116063063343382, 30120189902313, 292451576741007, 1156379271702225)
                } } } ,
                new LookupTable { affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(3180171966714267, 2147692869914563, 1455665844462196, 1986737809425946, 2437006863943337),
                Y_minus_X = new FieldElement51(137732961814206, 706670923917341, 1387038086865771, 1965643813686352, 1384777115696347),
                XY2d = new FieldElement51(481144981981577, 2053319313589856, 2065402289827512, 617954271490316, 1106602634668125)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2948097833334040, 3145099472726142, 1148636718636008, 2278533891034865, 2203955659340680),
                Y_minus_X = new FieldElement51(657390353372855, 998499966885562, 991893336905797, 810470207106761, 343139804608786),
                XY2d = new FieldElement51(791736669492960, 934767652997115, 824656780392914, 1759463253018643, 361530362383518)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2022541353055578, 4346500076272714, 3802807888710933, 2494585331103411, 2947785218648809),
                Y_minus_X = new FieldElement51(1287487199965223, 2215311941380308, 1552928390931986, 1664859529680196, 1125004975265243),
                XY2d = new FieldElement51(677434665154918, 989582503122485, 1817429540898386, 1052904935475344, 1143826298169798)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2619066141993637, 2570231002607651, 2947429167440602, 2885885471266079, 2276381426249673),
                Y_minus_X = new FieldElement51(773360688841258, 1815381330538070, 363773437667376, 539629987070205, 783280434248437),
                XY2d = new FieldElement51(180820816194166, 168937968377394, 748416242794470, 1227281252254508, 1567587861004268)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2730575372268893, 2062896624554806, 2951191072970647, 2609899222113120, 1277310261461760),
                Y_minus_X = new FieldElement51(1984740906540026, 1079164179400229, 1056021349262661, 1659958556483663, 1088529069025527),
                XY2d = new FieldElement51(580736401511151, 1842931091388998, 1177201471228238, 2075460256527244, 1301133425678027)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1515728832059163, 1575261009617579, 1510246567196186, 2442877836294952, 2368461529974388),
                Y_minus_X = new FieldElement51(1295295738269652, 1714742313707026, 545583042462581, 2034411676262552, 1513248090013606),
                XY2d = new FieldElement51(230710545179830, 30821514358353, 760704303452229, 390668103790604, 573437871383156)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3421179921230875, 2514967047430861, 4274701112739695, 3071700566936367, 4275698278559832),
                Y_minus_X = new FieldElement51(2102254323485823, 1570832666216754, 34696906544624, 1993213739807337, 70638552271463),
                XY2d = new FieldElement51(894132856735058, 548675863558441, 845349339503395, 1942269668326667, 1615682209874691)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3539470031223082, 1222355136884919, 1846481788678694, 1150426571265110, 1613523400722047),
                Y_minus_X = new FieldElement51(793388516527298, 1315457083650035, 1972286999342417, 1901825953052455, 338269477222410),
                XY2d = new FieldElement51(550201530671806, 778605267108140, 2063911101902983, 115500557286349, 2041641272971022)
            } } },
                new LookupTable { affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(717255318455100, 519313764361315, 2080406977303708, 541981206705521, 774328150311600),
                Y_minus_X = new FieldElement51(261715221532238, 1795354330069993, 1496878026850283, 499739720521052, 389031152673770),
                XY2d = new FieldElement51(1997217696294013, 1717306351628065, 1684313917746180, 1644426076011410, 1857378133465451)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3727234538477877, 2328731709971226, 3368528843456914, 2002544139318041, 2977347647489186),
                Y_minus_X = new FieldElement51(2022306639183567, 726296063571875, 315345054448644, 1058733329149221, 1448201136060677),
                XY2d = new FieldElement51(1710065158525665, 1895094923036397, 123988286168546, 1145519900776355, 1607510767693874)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2813405189107769, 1071733543815036, 2383296312486238, 1946868434569998, 3079937947649451),
                Y_minus_X = new FieldElement51(1548495173745801, 442310529226540, 998072547000384, 553054358385281, 644824326376171),
                XY2d = new FieldElement51(1445526537029440, 2225519789662536, 914628859347385, 1064754194555068, 1660295614401091)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3451490036797185, 2275827949507588, 2318438102929588, 2309425969971222, 2816893781664854),
                Y_minus_X = new FieldElement51(876926774220824, 554618976488214, 1012056309841565, 839961821554611, 1414499340307677),
                XY2d = new FieldElement51(703047626104145, 1266841406201770, 165556500219173, 486991595001879, 1011325891650656)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1622861044480487, 1156394801573634, 4120932379100752, 2578903799462977, 2095342781472283),
                Y_minus_X = new FieldElement51(334886927423922, 489511099221528, 129160865966726, 1720809113143481, 619700195649254),
                XY2d = new FieldElement51(1646545795166119, 1758370782583567, 714746174550637, 1472693650165135, 898994790308209)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2585203586724508, 2547572356138185, 1693106465353609, 912330357530760, 2723035471635610),
                Y_minus_X = new FieldElement51(1811196219982022, 1068969825533602, 289602974833439, 1988956043611592, 863562343398367),
                XY2d = new FieldElement51(906282429780072, 2108672665779781, 432396390473936, 150625823801893, 1708930497638539)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(925664675702309, 2273216662253932, 4083236455546587, 601157008940112, 2623617868729744),
                Y_minus_X = new FieldElement51(1479786007267725, 1738881859066675, 68646196476567, 2146507056100328, 1247662817535471),
                XY2d = new FieldElement51(52035296774456, 939969390708103, 312023458773250, 59873523517659, 1231345905848899)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2895154920100990, 2541986621181021, 2013561737429022, 2571447883196794, 2645536492181409),
                Y_minus_X = new FieldElement51(129358342392716, 1932811617704777, 1176749390799681, 398040349861790, 1170779668090425),
                XY2d = new FieldElement51(2051980782668029, 121859921510665, 2048329875753063, 1235229850149665, 519062146124755)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(3859970785658325, 2667608874045675, 1350468408164765, 2038620059057678, 3278704299674360),
                Y_minus_X = new FieldElement51(1837656083115103, 1510134048812070, 906263674192061, 1821064197805734, 565375124676301),
                XY2d = new FieldElement51(578027192365650, 2034800251375322, 2128954087207123, 478816193810521, 2196171989962750)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1633188840273120, 3104586986058956, 1548762607215795, 1266275218902681, 3359018017010381),
                Y_minus_X = new FieldElement51(462189358480054, 1784816734159228, 1611334301651368, 1303938263943540, 707589560319424),
                XY2d = new FieldElement51(1038829280972848, 38176604650029, 753193246598573, 1136076426528122, 595709990562434)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3660251634545082, 2194984964010832, 2198361797561729, 1061962440055713, 1645147963442934),
                Y_minus_X = new FieldElement51(4701053362120, 1647641066302348, 1047553002242085, 1923635013395977, 206970314902065),
                XY2d = new FieldElement51(1750479161778571, 1362553355169293, 1891721260220598, 966109370862782, 1024913988299801)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2464498862816952, 1117950018299774, 1873945661751056, 3655602735669306, 2382695896337945),
                Y_minus_X = new FieldElement51(636808533673210, 1262201711667560, 390951380330599, 1663420692697294, 561951321757406),
                XY2d = new FieldElement51(520731594438141, 1446301499955692, 273753264629267, 1565101517999256, 1019411827004672)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3178327305714638, 3443653291096626, 734233225181170, 2435838701226518, 4042225960010590),
                Y_minus_X = new FieldElement51(1464651961852572, 1483737295721717, 1519450561335517, 1161429831763785, 405914998179977),
                XY2d = new FieldElement51(996126634382301, 796204125879525, 127517800546509, 344155944689303, 615279846169038)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2990523894660505, 2188666632415295, 1961313708559162, 1506545807547587, 3403101452654988),
                Y_minus_X = new FieldElement51(622917337413835, 1218989177089035, 1284857712846592, 970502061709359, 351025208117090),
                XY2d = new FieldElement51(2067814584765580, 1677855129927492, 2086109782475197, 235286517313238, 1416314046739645)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2838644076315587, 2559244195637442, 458399356043425, 2853867838192310, 3280348017100490),
                Y_minus_X = new FieldElement51(678489922928203, 2016657584724032, 90977383049628, 1026831907234582, 615271492942522),
                XY2d = new FieldElement51(301225714012278, 1094837270268560, 1202288391010439, 644352775178361, 1647055902137983)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1210746697896459, 1416608304244708, 2938287290903104, 3496931005119382, 3303038150540984),
                Y_minus_X = new FieldElement51(1135604073198207, 1683322080485474, 769147804376683, 2086688130589414, 900445683120379),
                XY2d = new FieldElement51(1971518477615628, 401909519527336, 448627091057375, 1409486868273821, 1214789035034363)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1364039144731711, 1897497433586190, 2203097701135459, 2397261210496499, 1349844460790698),
                Y_minus_X = new FieldElement51(1045230323257973, 818206601145807, 630513189076103, 1672046528998132, 807204017562437),
                XY2d = new FieldElement51(439961968385997, 386362664488986, 1382706320807688, 309894000125359, 2207801346498567)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3480804500082836, 3172443782216110, 2375775707596425, 2933223806901024, 1400559197080972),
                Y_minus_X = new FieldElement51(2003766096898049, 170074059235165, 1141124258967971, 1485419893480973, 1573762821028725),
                XY2d = new FieldElement51(729905708611432, 1270323270673202, 123353058984288, 426460209632942, 2195574535456672)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1271140255321216, 2044363183174497, 2303925201319937, 3696920060379952, 3194341800024331),
                Y_minus_X = new FieldElement51(1761608437466135, 583360847526804, 1586706389685493, 2157056599579261, 1170692369685772),
                XY2d = new FieldElement51(871476219910823, 1878769545097794, 2241832391238412, 548957640601001, 690047440233174)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2548994545820755, 1366347803776819, 3552985325930849, 561849853336293, 1533554921345731),
                Y_minus_X = new FieldElement51(999628998628371, 1132836708493400, 2084741674517453, 469343353015612, 678782988708035),
                XY2d = new FieldElement51(2189427607417022, 699801937082607, 412764402319267, 1478091893643349, 2244675696854460)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3964091869651792, 2456213404310121, 3657538451018088, 2660781114515010, 3112882032961968),
                Y_minus_X = new FieldElement51(508561155940631, 966928475686665, 2236717801150132, 424543858577297, 2089272956986143),
                XY2d = new FieldElement51(221245220129925, 1156020201681217, 491145634799213, 542422431960839, 828100817819207)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2405556784925632, 1299874139923976, 2644898978945750, 1058234455773021, 996989038681183),
                Y_minus_X = new FieldElement51(559086812798481, 573177704212711, 1629737083816402, 1399819713462595, 1646954378266038),
                XY2d = new FieldElement51(1887963056288059, 228507035730124, 1468368348640282, 930557653420194, 613513962454686)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1224529808187534, 1577022856702685, 2206946542980843, 625883007765001, 2531730607197406),
                Y_minus_X = new FieldElement51(1076287717051609, 1114455570543035, 187297059715481, 250446884292121, 1885187512550540),
                XY2d = new FieldElement51(902497362940219, 76749815795675, 1657927525633846, 1420238379745202, 1340321636548352)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1129576631190765, 3533793823712575, 996844254743017, 2509676177174497, 3402650555740265),
                Y_minus_X = new FieldElement51(628740660038789, 1943038498527841, 467786347793886, 1093341428303375, 235413859513003),
                XY2d = new FieldElement51(237425418909360, 469614029179605, 1512389769174935, 1241726368345357, 441602891065214)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(3988217766743784, 726531315520507, 1833335034432527, 1629442561574747, 2876218732971333),
                Y_minus_X = new FieldElement51(1960754663920689, 497040957888962, 1909832851283095, 1271432136996826, 2219780368020940),
                XY2d = new FieldElement51(1537037379417136, 1358865369268262, 2130838645654099, 828733687040705, 1999987652890901)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(629042105241795, 1098854999137608, 887281544569320, 3674901833560025, 2259711072636808),
                Y_minus_X = new FieldElement51(1811562332665373, 1501882019007673, 2213763501088999, 359573079719636, 36370565049116),
                XY2d = new FieldElement51(218907117361280, 1209298913016966, 1944312619096112, 1130690631451061, 1342327389191701)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1369976867854685, 1396479602419169, 4017456468084104, 2203659200586298, 3250127649802489),
                Y_minus_X = new FieldElement51(2230701885562825, 1348173180338974, 2172856128624598, 1426538746123771, 444193481326151),
                XY2d = new FieldElement51(784210426627951, 918204562375674, 1284546780452985, 1324534636134684, 1872449409642708)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2571438643225542, 2848082470493653, 2037902696412607, 1557219121643918, 341938082688094),
                Y_minus_X = new FieldElement51(1901860206695915, 2004489122065736, 1625847061568236, 973529743399879, 2075287685312905),
                XY2d = new FieldElement51(1371853944110545, 1042332820512553, 1949855697918254, 1791195775521505, 37487364849293)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(687200189577836, 1082536651125675, 2896024754556794, 2592723009743198, 2595381160432643),
                Y_minus_X = new FieldElement51(2082717129583892, 27829425539422, 145655066671970, 1690527209845512, 1865260509673478),
                XY2d = new FieldElement51(1059729620568824, 2163709103470266, 1440302280256872, 1769143160546397, 869830310425069)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3861316033464273, 777277757338816, 2101121130363987, 550762194946473, 1905542338659364),
                Y_minus_X = new FieldElement51(2024821921041576, 426948675450149, 595133284085473, 471860860885970, 600321679413000),
                XY2d = new FieldElement51(598474602406721, 1468128276358244, 1191923149557635, 1501376424093216, 1281662691293476)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1721138489890688, 1264336102277790, 2684864359106535, 1359988423149465, 3813671107094695),
                Y_minus_X = new FieldElement51(719520245587143, 393380711632345, 132350400863381, 1543271270810729, 1819543295798660),
                XY2d = new FieldElement51(396397949784152, 1811354474471839, 1362679985304303, 2117033964846756, 498041172552279)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1812471844975748, 1856491995543149, 126579494584102, 3288044672967868, 1975108050082549),
                Y_minus_X = new FieldElement51(650623932407995, 1137551288410575, 2125223403615539, 1725658013221271, 2134892965117796),
                XY2d = new FieldElement51(522584000310195, 1241762481390450, 1743702789495384, 2227404127826575, 1686746002148897)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(427904865186293, 1703211129693455, 1585368107547509, 3688784302429584, 3012988348299225),
                Y_minus_X = new FieldElement51(318101947455002, 248138407995851, 1481904195303927, 309278454311197, 1258516760217879),
                XY2d = new FieldElement51(1275068538599310, 513726919533379, 349926553492294, 688428871968420, 1702400196000666)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3313663849950481, 3213411074010628, 2573659446386085, 3297400443644764, 1985130202504037),
                Y_minus_X = new FieldElement51(1558816436882417, 1962896332636523, 1337709822062152, 1501413830776938, 294436165831932),
                XY2d = new FieldElement51(818359826554971, 1862173000996177, 626821592884859, 573655738872376, 1749691246745455)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1988022651432119, 3333911312271288, 1834020786104820, 3706626690108935, 692929915223121),
                Y_minus_X = new FieldElement51(2146513703733331, 584788900394667, 464965657279958, 2183973639356127, 238371159456790),
                XY2d = new FieldElement51(1129007025494441, 2197883144413266, 265142755578169, 971864464758890, 1983715884903702)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1291366624493056, 2633256531874362, 1711482489312443, 1815233647702022, 3144079596677715),
                Y_minus_X = new FieldElement51(444548969917454, 1452286453853356, 2113731441506810, 645188273895859, 810317625309512),
                XY2d = new FieldElement51(2242724082797924, 1373354730327868, 1006520110883049, 2147330369940688, 1151816104883620)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3997520014069025, 4163522956860564, 2056329390702073, 2607026987995097, 3131032608056347),
                Y_minus_X = new FieldElement51(163723479936298, 115424889803150, 1156016391581227, 1894942220753364, 1970549419986329),
                XY2d = new FieldElement51(681981452362484, 267208874112496, 1374683991933094, 638600984916117, 646178654558546)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2265178468539480, 2358037120714814, 1944412051589650, 4093776581610705, 2482502633520820),
                Y_minus_X = new FieldElement51(260683893467075, 854060306077237, 913639551980112, 4704576840123, 280254810808712),
                XY2d = new FieldElement51(715374893080287, 1173334812210491, 1806524662079626, 1894596008000979, 398905715033393)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2751826223412909, 3848231101880618, 1420380351989369, 3237011375206737, 392444930785632),
                Y_minus_X = new FieldElement51(2096421546958141, 1922523000950363, 789831022876840, 427295144688779, 320923973161730),
                XY2d = new FieldElement51(1927770723575450, 1485792977512719, 1850996108474547, 551696031508956, 2126047405475647)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2112099158080129, 2994370617594963, 2258284371762679, 1951119898618915, 2344890196388664),
                Y_minus_X = new FieldElement51(383905201636970, 859946997631870, 855623867637644, 1017125780577795, 794250831877809),
                XY2d = new FieldElement51(77571826285752, 999304298101753, 487841111777762, 1038031143212339, 339066367948762)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2926794589205781, 2517835660016036, 826951213393477, 1405007746162285, 1781791018620876),
                Y_minus_X = new FieldElement51(1001412661522686, 348196197067298, 1666614366723946, 888424995032760, 580747687801357),
                XY2d = new FieldElement51(1939560076207777, 1409892634407635, 552574736069277, 383854338280405, 190706709864139)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2177087163428741, 1439255351721944, 3459870654068041, 2230616362004768, 1396886392021913),
                Y_minus_X = new FieldElement51(676962063230039, 1880275537148808, 2046721011602706, 888463247083003, 1318301552024067),
                XY2d = new FieldElement51(1466980508178206, 617045217998949, 652303580573628, 757303753529064, 207583137376902)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3762856566592150, 2357202940576524, 2745234706458093, 1091943425335975, 1802717338077427),
                Y_minus_X = new FieldElement51(1853982405405128, 1878664056251147, 1528011020803992, 1019626468153565, 1128438412189035),
                XY2d = new FieldElement51(1963939888391106, 293456433791664, 697897559513649, 985882796904380, 796244541237972)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2668570812315008, 2641455366112301, 1314476859406755, 1749382513022778, 3413705412424739),
                Y_minus_X = new FieldElement51(1428358296490651, 1027115282420478, 304840698058337, 441410174026628, 1819358356278573),
                XY2d = new FieldElement51(204943430200135, 1554861433819175, 216426658514651, 264149070665950, 2047097371738319)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1934415182909015, 1393285083565062, 2768209145458208, 3409490548679139, 2372839480279515),
                Y_minus_X = new FieldElement51(662035583584445, 286736105093098, 1131773000510616, 818494214211439, 472943792054479),
                XY2d = new FieldElement51(665784778135882, 1893179629898606, 808313193813106, 276797254706413, 1563426179676396)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(945205108984213, 2778077376644543, 1324180513733565, 1666970227868664, 2405347422974421),
                Y_minus_X = new FieldElement51(2031433403516252, 203996615228162, 170487168837083, 981513604791390, 843573964916831),
                XY2d = new FieldElement51(1476570093962618, 838514669399805, 1857930577281364, 2017007352225784, 317085545220047)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1461557121912823, 1600674043318359, 2157134900399597, 1670641601940616, 2379565397488531),
                Y_minus_X = new FieldElement51(1293543509393474, 2143624609202546, 1058361566797508, 214097127393994, 946888515472729),
                XY2d = new FieldElement51(357067959932916, 1290876214345711, 521245575443703, 1494975468601005, 800942377643885)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2817916472785262, 820247422481739, 994464017954148, 2578957425371613, 2344391131796991),
                Y_minus_X = new FieldElement51(617256647603209, 1652107761099439, 1857213046645471, 1085597175214970, 817432759830522),
                XY2d = new FieldElement51(771808161440705, 1323510426395069, 680497615846440, 851580615547985, 1320806384849017)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1219260086131896, 2898968820282063, 2331400938444953, 2161724213426747, 2656661710745446),
                Y_minus_X = new FieldElement51(1327968293887866, 1335500852943256, 1401587164534264, 558137311952440, 1551360549268902),
                XY2d = new FieldElement51(417621685193956, 1429953819744454, 396157358457099, 1940470778873255, 214000046234152)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1268047918491954, 2172375426948536, 1533916099229249, 1761293575457130, 3842422480712013),
                Y_minus_X = new FieldElement51(1627072914981959, 2211603081280073, 1912369601616504, 1191770436221309, 2187309757525860),
                XY2d = new FieldElement51(1149147819689533, 378692712667677, 828475842424202, 2218619146419342, 70688125792186)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3551539230764990, 3690416477138006, 3788528892189659, 2053896748919837, 3260220846276494),
                Y_minus_X = new FieldElement51(2040723824657366, 399555637875075, 632543375452995, 872649937008051, 1235394727030233),
                XY2d = new FieldElement51(2211311599327900, 2139787259888175, 938706616835350, 12609661139114, 2081897930719789)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1324994503390431, 2588782144267879, 1183998925654176, 3343454479598522, 2300527487656566),
                Y_minus_X = new FieldElement51(1845522914617879, 1222198248335542, 150841072760134, 1927029069940982, 1189913404498011),
                XY2d = new FieldElement51(1079559557592645, 2215338383666441, 1903569501302605, 49033973033940, 305703433934152)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2346453219102138, 3637921163538246, 3313930291577009, 2288353761164521, 3085469462634093),
                Y_minus_X = new FieldElement51(1432015813136298, 440364795295369, 1395647062821501, 1976874522764578, 934452372723352),
                XY2d = new FieldElement51(1296625309219774, 2068273464883862, 1858621048097805, 1492281814208508, 2235868981918946)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1490330266465551, 1858795661361448, 3688040948655011, 2546373032584894, 3459939824714180),
                Y_minus_X = new FieldElement51(1282462923712748, 741885683986255, 2027754642827561, 518989529541027, 1826610009555945),
                XY2d = new FieldElement51(1525827120027511, 723686461809551, 1597702369236987, 244802101764964, 1502833890372311)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2365421849929742, 3485539881431101, 2925909765963743, 2114345180342964, 2418564326541511),
                Y_minus_X = new FieldElement51(2041668749310338, 2184405322203901, 1633400637611036, 2110682505536899, 2048144390084644),
                XY2d = new FieldElement51(503058759232932, 760293024620937, 2027152777219493, 666858468148475, 1539184379870952)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1916168475367211, 3167426246226591, 883217071712574, 363427871374304, 1976029821251593),
                Y_minus_X = new FieldElement51(678039535434506, 570587290189340, 1605302676614120, 2147762562875701, 1706063797091704),
                XY2d = new FieldElement51(1439489648586438, 2194580753290951, 832380563557396, 561521973970522, 584497280718389)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2439789269177838, 681223515948274, 1933493571072456, 1872921007304880, 2739962177820919),
                Y_minus_X = new FieldElement51(1413466089534451, 410844090765630, 1397263346404072, 408227143123410, 1594561803147811),
                XY2d = new FieldElement51(2102170800973153, 719462588665004, 1479649438510153, 1097529543970028, 1302363283777685)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3193865531532443, 3321113493038208, 2007341951411050, 2322773230131539, 1419433790163705),
                Y_minus_X = new FieldElement51(1146565545556377, 1661971299445212, 406681704748893, 564452436406089, 1109109865829139),
                XY2d = new FieldElement51(2214421081775077, 1165671861210569, 1890453018796184, 3556249878661, 442116172656317)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3005630360306059, 1666955059895018, 1530775289309243, 3371786842789394, 2164156153857579),
                Y_minus_X = new FieldElement51(615171919212796, 1523849404854568, 854560460547503, 2067097370290715, 1765325848586042),
                XY2d = new FieldElement51(1094538949313667, 1796592198908825, 870221004284388, 2025558921863561, 1699010892802384)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1951351290725195, 1916457206844795, 2449824998123274, 1909076887557594, 1938542290318919),
                Y_minus_X = new FieldElement51(1014323197538413, 869150639940606, 1756009942696599, 1334952557375672, 1544945379082874),
                XY2d = new FieldElement51(764055910920305, 1603590757375439, 146805246592357, 1843313433854297, 954279890114939)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(80113526615731, 764536758732259, 3306939158785481, 2721052465444637, 2869697326116762),
                Y_minus_X = new FieldElement51(74497112547268, 740094153192149, 1745254631717581, 727713886503130, 1283034364416928),
                XY2d = new FieldElement51(525892105991110, 1723776830270342, 1476444848991936, 573789489857760, 133864092632978)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2794411533877810, 1986812262899320, 1162535242465837, 2733298779828712, 2796400347268869),
                Y_minus_X = new FieldElement51(64123227344372, 1239927720647794, 1360722983445904, 222610813654661, 62429487187991),
                XY2d = new FieldElement51(1793193323953132, 91096687857833, 70945970938921, 2158587638946380, 1537042406482111)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1895854577604590, 3646695522634664, 1728548428495943, 3392664713925397, 2815445147288308),
                Y_minus_X = new FieldElement51(141358280486863, 91435889572504, 1087208572552643, 1829599652522921, 1193307020643647),
                XY2d = new FieldElement51(1611230858525381, 950720175540785, 499589887488610, 2001656988495019, 88977313255908)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3440880315164906, 2184348804772596, 3292618539427567, 2018318290311833, 1712060030915354),
                Y_minus_X = new FieldElement51(873966876953756, 1090638350350440, 1708559325189137, 672344594801910, 1320437969700239),
                XY2d = new FieldElement51(1508590048271766, 1131769479776094, 101550868699323, 428297785557897, 561791648661744)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(3008217384184691, 2489682092917849, 2136263418594015, 1701968045454886, 2955512998822720),
                Y_minus_X = new FieldElement51(1781187809325462, 1697624151492346, 1381393690939988, 175194132284669, 1483054666415238),
                XY2d = new FieldElement51(2175517777364616, 708781536456029, 955668231122942, 1967557500069555, 2021208005604118)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3366935780292116, 2476017186636029, 915967306279221, 593866251291540, 2813546907893254),
                Y_minus_X = new FieldElement51(1443163092879439, 391875531646162, 2180847134654632, 464538543018753, 1594098196837178),
                XY2d = new FieldElement51(850858855888869, 319436476624586, 327807784938441, 740785849558761, 17128415486016)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2132756334090048, 2788047633840893, 2300706964962114, 2860273011285942, 3513489358708031),
                Y_minus_X = new FieldElement51(1525176236978354, 974205476721062, 293436255662638, 148269621098039, 137961998433963),
                XY2d = new FieldElement51(1121075518299410, 2071745529082111, 1265567917414828, 1648196578317805, 496232102750820)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2374121042985030, 3274721891178932, 2001275453369483, 2017441881607947, 3245005694463250),
                Y_minus_X = new FieldElement51(654925550560074, 1168810995576858, 575655959430926, 905758704861388, 496774564663534),
                XY2d = new FieldElement51(1954109525779738, 2117022646152485, 338102630417180, 1194140505732026, 107881734943492)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1714785840001267, 4288299832366837, 1876380234251965, 2056717182974196, 1645855254384642),
                Y_minus_X = new FieldElement51(106431476499341, 62482972120563, 1513446655109411, 807258751769522, 538491469114),
                XY2d = new FieldElement51(2002850762893643, 1243624520538135, 1486040410574605, 2184752338181213, 378495998083531)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(922510868424903, 1089502620807680, 402544072617374, 1131446598479839, 1290278588136533),
                Y_minus_X = new FieldElement51(1867998812076769, 715425053580701, 39968586461416, 2173068014586163, 653822651801304),
                XY2d = new FieldElement51(162892278589453, 182585796682149, 75093073137630, 497037941226502, 133871727117371)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(4166396390264918, 1608999621851577, 1987629837704609, 1519655314857977, 1819193753409464),
                Y_minus_X = new FieldElement51(1949315551096831, 1069003344994464, 1939165033499916, 1548227205730856, 1933767655861407),
                XY2d = new FieldElement51(1730519386931635, 1393284965610134, 1597143735726030, 416032382447158, 1429665248828629)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(360275475604546, 2799635544748326, 2467160717872776, 2848446553564254, 2584509464110332),
                Y_minus_X = new FieldElement51(47602113726801, 1522314509708010, 437706261372925, 814035330438027, 335930650933545),
                XY2d = new FieldElement51(1291597595523886, 1058020588994081, 402837842324045, 1363323695882781, 2105763393033193)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2361321796251793, 3967057562270386, 1112231216891515, 2046641005101484, 2386048970842261),
                Y_minus_X = new FieldElement51(2156991030936798, 2227544497153325, 1869050094431622, 754875860479115, 1754242344267058),
                XY2d = new FieldElement51(1846089562873800, 98894784984326, 1412430299204844, 171351226625762, 1100604760929008)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2335972195815721, 2751510784385293, 425749630620777, 1762872794206857, 2864642415813208),
                Y_minus_X = new FieldElement51(868309334532756, 1703010512741873, 1952690008738057, 4325269926064, 2071083554962116),
                XY2d = new FieldElement51(523094549451158, 401938899487815, 1407690589076010, 2022387426254453, 158660516411257)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(612867287630009, 2700012425789062, 2823428891104443, 1466796750919375, 1728478129663858),
                Y_minus_X = new FieldElement51(1723848973783452, 2208822520534681, 1718748322776940, 1974268454121942, 1194212502258141),
                XY2d = new FieldElement51(1254114807944608, 977770684047110, 2010756238954993, 1783628927194099, 1525962994408256)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2484263871921055, 1948628555342433, 1835348780427694, 1031609499437291, 2316271920603621),
                Y_minus_X = new FieldElement51(767338676040683, 754089548318405, 1523192045639075, 435746025122062, 512692508440385),
                XY2d = new FieldElement51(1255955808701983, 1700487367990941, 1166401238800299, 1175121994891534, 1190934801395380)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2600943821853521, 1337012557669161, 1475912332999108, 3573418268585706, 2299411105589567),
                Y_minus_X = new FieldElement51(877519947135419, 2172838026132651, 272304391224129, 1655143327559984, 886229406429814),
                XY2d = new FieldElement51(375806028254706, 214463229793940, 572906353144089, 572168269875638, 697556386112979)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1168827102357825, 823864273033637, 4323338565789945, 788062026895923, 2851378154428610),
                Y_minus_X = new FieldElement51(1948116082078088, 2054898304487796, 2204939184983900, 210526805152138, 786593586607626),
                XY2d = new FieldElement51(1915320147894736, 156481169009469, 655050471180417, 592917090415421, 2165897438660879)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1726336468579724, 1119932070398949, 1929199510967666, 2285718602008207, 1836837863503149),
                Y_minus_X = new FieldElement51(829996854845988, 217061778005138, 1686565909803640, 1346948817219846, 1723823550730181),
                XY2d = new FieldElement51(384301494966394, 687038900403062, 2211195391021739, 254684538421383, 1245698430589680)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1247567493562669, 4229981908141095, 2435671288478202, 806570235643434, 2540261331753164),
                Y_minus_X = new FieldElement51(1449077384734201, 38285445457996, 2136537659177832, 2146493000841573, 725161151123125),
                XY2d = new FieldElement51(1201928866368855, 800415690605445, 1703146756828343, 997278587541744, 1858284414104014)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2608268623334125, 3034173730618399, 1718002439402869, 3644022065904502, 663171266061950),
                Y_minus_X = new FieldElement51(759628738230460, 1012693474275852, 353780233086498, 246080061387552, 2030378857679162),
                XY2d = new FieldElement51(2040672435071076, 888593182036908, 1298443657189359, 1804780278521327, 354070726137060)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1894938527423184, 3715012855162525, 2726210319182898, 2499094776718546, 877975941029127),
                Y_minus_X = new FieldElement51(207937160991127, 12966911039119, 820997788283092, 1010440472205286, 1701372890140810),
                XY2d = new FieldElement51(218882774543183, 533427444716285, 1233243976733245, 435054256891319, 1509568989549904)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(4140638349397055, 3303977572025869, 3465353617009382, 2420981822812579, 2715174081801119),
                Y_minus_X = new FieldElement51(299137589460312, 1594371588983567, 868058494039073, 257771590636681, 1805012993142921),
                XY2d = new FieldElement51(1806842755664364, 2098896946025095, 1356630998422878, 1458279806348064, 347755825962072)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1402334161391744, 3811883484731547, 1008585416617746, 1147797150908892, 1420416683642459),
                Y_minus_X = new FieldElement51(665506704253369, 273770475169863, 799236974202630, 848328990077558, 1811448782807931),
                XY2d = new FieldElement51(1468412523962641, 771866649897997, 1931766110147832, 799561180078482, 524837559150077)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2223212657821831, 2882216061048914, 2144451165500327, 3068710944633039, 3276150872095279),
                Y_minus_X = new FieldElement51(1266603897524861, 156378408858100, 1275649024228779, 447738405888420, 253186462063095),
                XY2d = new FieldElement51(2022215964509735, 136144366993649, 1800716593296582, 1193970603800203, 871675847064218)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1862751661970309, 851596246739884, 1519315554814041, 3794598280232697, 3669775149586767),
                Y_minus_X = new FieldElement51(1228168094547481, 334133883362894, 587567568420081, 433612590281181, 603390400373205),
                XY2d = new FieldElement51(121893973206505, 1843345804916664, 1703118377384911, 497810164760654, 101150811654673)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2710146069631716, 2542709749304591, 1452768413850678, 2802722688939463, 1537286854336537),
                Y_minus_X = new FieldElement51(584322311184395, 380661238802118, 114839394528060, 655082270500073, 2111856026034852),
                XY2d = new FieldElement51(996965581008991, 2148998626477022, 1012273164934654, 1073876063914522, 1688031788934939)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3175286832534829, 2085106799623354, 2779882615305384, 1606206360876187, 2987706905397772),
                Y_minus_X = new FieldElement51(1697697887804317, 1335343703828273, 831288615207040, 949416685250051, 288760277392022),
                XY2d = new FieldElement51(1419122478109648, 1325574567803701, 602393874111094, 2107893372601700, 1314159682671307)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2201150872731785, 2180241023425241, 2349463270108411, 1633405770247823, 3100744856129234),
                Y_minus_X = new FieldElement51(1173339555550611, 818605084277583, 47521504364289, 924108720564965, 735423405754506),
                XY2d = new FieldElement51(830104860549448, 1886653193241086, 1600929509383773, 1475051275443631, 286679780900937)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3828911108518224, 3282698983453994, 2396700729978777, 4216472406664814, 2820189914640497),
                Y_minus_X = new FieldElement51(278388655910247, 487143369099838, 927762205508727, 181017540174210, 1616886700741287),
                XY2d = new FieldElement51(1191033906638969, 940823957346562, 1606870843663445, 861684761499847, 658674867251089)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1875032594195527, 1427106132796197, 2976536204647406, 3153660325729987, 2887068310954007),
                Y_minus_X = new FieldElement51(622869792298357, 1903919278950367, 1922588621661629, 1520574711600434, 1087100760174640),
                XY2d = new FieldElement51(25465949416618, 1693639527318811, 1526153382657203, 125943137857169, 145276964043999)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2466539671654587, 920212862967914, 4191701364657517, 3463662605460468, 2336897329405367),
                Y_minus_X = new FieldElement51(2006245852772938, 734762734836159, 254642929763427, 1406213292755966, 239303749517686),
                XY2d = new FieldElement51(1619678837192149, 1919424032779215, 1357391272956794, 1525634040073113, 1310226789796241)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3292563523447371, 1704449869235351, 2857062884141577, 1998838089036354, 1312142911487502),
                Y_minus_X = new FieldElement51(1996723311435669, 1844342766567060, 985455700466044, 1165924681400960, 311508689870129),
                XY2d = new FieldElement51(43173156290518, 2202883069785309, 1137787467085917, 1733636061944606, 1394992037553852)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(670078326344559, 2807454838744604, 2723759199967685, 2141455487356408, 849015953823125),
                Y_minus_X = new FieldElement51(2197214573372804, 794254097241315, 1030190060513737, 267632515541902, 2040478049202624),
                XY2d = new FieldElement51(1812516004670529, 1609256702920783, 1706897079364493, 258549904773295, 996051247540686)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1540374301420565, 1764656898914615, 1810104162020396, 3175608592848336, 2916189887881826),
                Y_minus_X = new FieldElement51(1323460699404750, 1262690757880991, 871777133477900, 1060078894988977, 1712236889662886),
                XY2d = new FieldElement51(1696163952057966, 1391710137550823, 608793846867416, 1034391509472039, 1780770894075012)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1367603834210822, 4383788460268472, 890353773628143, 1908908219165595, 2522636708938139),
                Y_minus_X = new FieldElement51(597536315471731, 40375058742586, 1942256403956049, 1185484645495932, 312666282024145),
                XY2d = new FieldElement51(1919411405316294, 1234508526402192, 1066863051997083, 1008444703737597, 1348810787701552)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2102881477513865, 3822074379630609, 1573617900503707, 2270462449417831, 2232324307922097),
                Y_minus_X = new FieldElement51(1853931367696942, 8107973870707, 350214504129299, 775206934582587, 1752317649166792),
                XY2d = new FieldElement51(1417148368003523, 721357181628282, 505725498207811, 373232277872983, 261634707184480)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2186733281493248, 2250694917008620, 1014829812957440, 2731797975137637, 2335366007561721),
                Y_minus_X = new FieldElement51(1268116367301224, 560157088142809, 802626839600444, 2210189936605713, 1129993785579988),
                XY2d = new FieldElement51(615183387352312, 917611676109240, 878893615973325, 978940963313282, 938686890583575)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(522024729211672, 3296859129001056, 1892245413707789, 1907891107684253, 2059998109500714),
                Y_minus_X = new FieldElement51(1799679152208884, 912132775900387, 25967768040979, 432130448590461, 274568990261996),
                XY2d = new FieldElement51(98698809797682, 2144627600856209, 1907959298569602, 811491302610148, 1262481774981493)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1791451399743152, 1713538728337276, 2370149810942738, 1882306388849953, 158235232210248),
                Y_minus_X = new FieldElement51(1217809823321928, 2173947284933160, 1986927836272325, 1388114931125539, 12686131160169),
                XY2d = new FieldElement51(1650875518872272, 1136263858253897, 1732115601395988, 734312880662190, 1252904681142109)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2624786269799113, 2777230729143418, 2116279931702134, 2753222527273063, 1907002872974924),
                Y_minus_X = new FieldElement51(803147181835288, 868941437997146, 316299302989663, 943495589630550, 571224287904572),
                XY2d = new FieldElement51(227742695588364, 1776969298667369, 628602552821802, 457210915378118, 2041906378111140)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(815000523470260, 3164885502413555, 3303859931956420, 1345536665214222, 541623413135555),
                Y_minus_X = new FieldElement51(1580216071604333, 1877997504342444, 857147161260913, 703522726778478, 2182763974211603),
                XY2d = new FieldElement51(1870080310923419, 71988220958492, 1783225432016732, 615915287105016, 1035570475990230)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2982787564515398, 857613889540279, 1083813157271766, 1002817255970169, 1719228484436074),
                Y_minus_X = new FieldElement51(377616581647602, 1581980403078513, 804044118130621, 2034382823044191, 643844048472185),
                XY2d = new FieldElement51(176957326463017, 1573744060478586, 528642225008045, 1816109618372371, 1515140189765006)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1888911448245718, 3638910709296328, 4176303607751676, 1731539523700948, 2230378382645454),
                Y_minus_X = new FieldElement51(443392177002051, 233793396845137, 2199506622312416, 1011858706515937, 974676837063129),
                XY2d = new FieldElement51(1846351103143623, 1949984838808427, 671247021915253, 1946756846184401, 1929296930380217)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(849646212451983, 1410198775302919, 2325567699868943, 1641663456615811, 3014056086137659),
                Y_minus_X = new FieldElement51(692017667358279, 723305578826727, 1638042139863265, 748219305990306, 334589200523901),
                XY2d = new FieldElement51(22893968530686, 2235758574399251, 1661465835630252, 925707319443452, 1203475116966621)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3053098849470395, 3985092410411378, 1664508947088595, 2719548934677170, 3899298398220870),
                Y_minus_X = new FieldElement51(903105258014366, 427141894933047, 561187017169777, 1884330244401954, 1914145708422219),
                XY2d = new FieldElement51(1344191060517578, 1960935031767890, 1518838929955259, 1781502350597190, 1564784025565682)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2925523165433334, 1979969272514922, 3427087126180756, 1187589090978665, 1881897672213940),
                Y_minus_X = new FieldElement51(1917185587363432, 1098342571752737, 5935801044414, 2000527662351839, 1538640296181569),
                XY2d = new FieldElement51(2495540013192, 678856913479236, 224998292422872, 219635787698590, 1972465269000940)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(271413961212179, 3604851875156899, 2596511104968730, 2014925838520661, 2006221033113941),
                Y_minus_X = new FieldElement51(194583029968109, 514316781467765, 829677956235672, 1676415686873082, 810104584395840),
                XY2d = new FieldElement51(1980510813313589, 1948645276483975, 152063780665900, 129968026417582, 256984195613935)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1860190562533083, 1936576191345085, 2712900106391212, 1811043097042829, 3209286562992083),
                Y_minus_X = new FieldElement51(796664815624365, 1543160838872951, 1500897791837765, 1667315977988401, 599303877030711),
                XY2d = new FieldElement51(1151480509533204, 2136010406720455, 738796060240027, 319298003765044, 1150614464349587)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1731069268103131, 2987442261301335, 1364750481334267, 2669032653668119, 3178908082812908),
                Y_minus_X = new FieldElement51(1017222050227968, 1987716148359, 2234319589635701, 621282683093392, 2132553131763026),
                XY2d = new FieldElement51(1567828528453324, 1017807205202360, 565295260895298, 829541698429100, 307243822276582)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(249079270936229, 1501514259790706, 3199709537890096, 944551802437486, 2804458577667728),
                Y_minus_X = new FieldElement51(2089966982947227, 1854140343916181, 2151980759220007, 2139781292261749, 158070445864917),
                XY2d = new FieldElement51(1338766321464554, 1906702607371284, 1519569445519894, 115384726262267, 1393058953390992)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3616421371950629, 3764188048593604, 1926731583198685, 2041482526432505, 3172200936019022),
                Y_minus_X = new FieldElement51(1884844597333588, 601480070269079, 620203503079537, 1079527400117915, 1202076693132015),
                XY2d = new FieldElement51(840922919763324, 727955812569642, 1303406629750194, 522898432152867, 294161410441865)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2605560604520539, 1598361541848742, 3374705511887547, 4174333403844152, 2670907514351827),
                Y_minus_X = new FieldElement51(359856369838236, 180914355488683, 861726472646627, 218807937262986, 575626773232501),
                XY2d = new FieldElement51(755467689082474, 909202735047934, 730078068932500, 936309075711518, 2007798262842972)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1609384177904054, 2614544999293875, 1335318541768200, 3052765584121496, 2799677792952659),
                Y_minus_X = new FieldElement51(984339177776787, 815727786505884, 1645154585713747, 1659074964378553, 1686601651984156),
                XY2d = new FieldElement51(1697863093781930, 599794399429786, 1104556219769607, 830560774794755, 12812858601017)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1168737550514982, 897832437380552, 463140296333799, 2554364413707795, 2008360505135500),
                Y_minus_X = new FieldElement51(1856930662813910, 678090852002597, 1920179140755167, 1259527833759868, 55540971895511),
                XY2d = new FieldElement51(1158643631044921, 476554103621892, 178447851439725, 1305025542653569, 103433927680625)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2176793111709008, 3828525530035639, 2009350167273522, 2012390194631546, 2125297410909580),
                Y_minus_X = new FieldElement51(825403285195098, 2144208587560784, 1925552004644643, 1915177840006985, 1015952128947864),
                XY2d = new FieldElement51(1807108316634472, 1534392066433717, 347342975407218, 1153820745616376, 7375003497471)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3234860815484973, 2683011703586488, 2201903782961092, 3069193724749589, 2214616493042166),
                Y_minus_X = new FieldElement51(228567918409756, 865093958780220, 358083886450556, 159617889659320, 1360637926292598),
                XY2d = new FieldElement51(234147501399755, 2229469128637390, 2175289352258889, 1397401514549353, 1885288963089922)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3363562226636810, 2504649386192636, 3300514047508588, 2397910909286693, 1237505378776769),
                Y_minus_X = new FieldElement51(1113790697840279, 1051167139966244, 1045930658550944, 2011366241542643, 1686166824620755),
                XY2d = new FieldElement51(1054097349305049, 1872495070333352, 182121071220717, 1064378906787311, 100273572924182)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3558210666856834, 1627717417672446, 2302783034773665, 1109249951172249, 3122001602766640),
                Y_minus_X = new FieldElement51(104233794644221, 1548919791188248, 2224541913267306, 2054909377116478, 1043803389015153),
                XY2d = new FieldElement51(216762189468802, 707284285441622, 190678557969733, 973969342604308, 1403009538434867)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3530824104723725, 2596576648903557, 2525521909702446, 4086000250496689, 634517197663803),
                Y_minus_X = new FieldElement51(343805853118335, 1302216857414201, 566872543223541, 2051138939539004, 321428858384280),
                XY2d = new FieldElement51(470067171324852, 1618629234173951, 2000092177515639, 7307679772789, 1117521120249968)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2529951391976704, 1810282338562946, 1771599529530998, 3635459223356879, 2937173228157088),
                Y_minus_X = new FieldElement51(577009397403102, 1791440261786291, 2177643735971638, 174546149911960, 1412505077782326),
                XY2d = new FieldElement51(893719721537457, 1201282458018197, 1522349501711173, 58011597740583, 1130406465887139)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(412607348255434, 1280455764199780, 2233277987330768, 2265979894086913, 2583384512102412),
                Y_minus_X = new FieldElement51(262483770854550, 990511055108216, 526885552771698, 571664396646158, 354086190278723),
                XY2d = new FieldElement51(1820352417585487, 24495617171480, 1547899057533253, 10041836186225, 480457105094042)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2023310314989233, 2889705151211129, 2106474638900686, 2809620524769320, 1687858215057825),
                Y_minus_X = new FieldElement51(1144168702609745, 604444390410187, 1544541121756138, 1925315550126027, 626401428894002),
                XY2d = new FieldElement51(1922168257351784, 2018674099908659, 1776454117494445, 956539191509034, 36031129147635)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2796444352433270, 1039872944430373, 3128550222815858, 2962457525011798, 3468752501170219),
                Y_minus_X = new FieldElement51(58242421545916, 2035812695641843, 2118491866122923, 1191684463816273, 46921517454099),
                XY2d = new FieldElement51(272268252444639, 1374166457774292, 2230115177009552, 1053149803909880, 1354288411641016)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1857910905368338, 1754729879288912, 3137745277795125, 1516096106802165, 1602902393369811),
                Y_minus_X = new FieldElement51(1193437069800958, 901107149704790, 999672920611411, 477584824802207, 364239578697845),
                XY2d = new FieldElement51(886299989548838, 1538292895758047, 1590564179491896, 1944527126709657, 837344427345298)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3006358179063534, 1712186480903617, 3955456640022779, 3002110732175033, 2770795853936147),
                Y_minus_X = new FieldElement51(1309847803895382, 1462151862813074, 211370866671570, 1544595152703681, 1027691798954090),
                XY2d = new FieldElement51(803217563745370, 1884799722343599, 1357706345069218, 2244955901722095, 730869460037413)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2941099284981214, 1831210565161070, 3626987155270686, 3358084791231418, 1893781834054268),
                Y_minus_X = new FieldElement51(696351368613042, 1494385251239250, 738037133616932, 636385507851544, 927483222611406),
                XY2d = new FieldElement51(1949114198209333, 1104419699537997, 783495707664463, 1747473107602770, 2002634765788641)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1607325776830197, 2782683755100581, 1451089452727894, 3833490970768671, 496100432831153),
                Y_minus_X = new FieldElement51(1068900648804224, 2006891997072550, 1134049269345549, 1638760646180091, 2055396084625778),
                XY2d = new FieldElement51(2222475519314561, 1870703901472013, 1884051508440561, 1344072275216753, 1318025677799069)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(155711679280637, 681100400509288, 389811735211209, 2135723811340709, 2660533024889373),
                Y_minus_X = new FieldElement51(7813206966729, 194444201427550, 2071405409526507, 1065605076176312, 1645486789731291),
                XY2d = new FieldElement51(16625790644959, 1647648827778410, 1579910185572704, 436452271048548, 121070048451050)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3289062842237779, 2820185594063076, 2549752917829677, 3810384325616458, 2238221839292470),
                Y_minus_X = new FieldElement51(190565267697443, 672855706028058, 338796554369226, 337687268493904, 853246848691734),
                XY2d = new FieldElement51(1763863028400139, 766498079432444, 1321118624818005, 69494294452268, 858786744165651)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3543856582248253, 1456632109855637, 3352431060735432, 1386133165675320, 3484698163879000),
                Y_minus_X = new FieldElement51(366253102478259, 525676242508811, 1449610995265438, 1183300845322183, 185960306491545),
                XY2d = new FieldElement51(28315355815982, 460422265558930, 1799675876678724, 1969256312504498, 1051823843138725)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2408714813047231, 3857948219405196, 1665208410108429, 2569443092377519, 1383783705665319),
                Y_minus_X = new FieldElement51(54684536365732, 2210010038536222, 1194984798155308, 535239027773705, 1516355079301361),
                XY2d = new FieldElement51(1484387703771650, 198537510937949, 2186282186359116, 617687444857508, 647477376402122)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2147715541830533, 2751832352131065, 2898179830570073, 2604027669016369, 1488268620408051),
                Y_minus_X = new FieldElement51(159386186465542, 1877626593362941, 618737197060512, 1026674284330807, 1158121760792685),
                XY2d = new FieldElement51(1744544377739822, 1964054180355661, 1685781755873170, 2169740670377448, 1286112621104591)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2333777063470241, 3919742931398333, 3920783633320113, 1605016835177614, 1353960708075544),
                Y_minus_X = new FieldElement51(1602253788689063, 439542044889886, 2220348297664483, 657877410752869, 157451572512238),
                XY2d = new FieldElement51(1029287186166717, 65860128430192, 525298368814832, 1491902500801986, 1461064796385400)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2660016802414475, 2121095722306988, 913562102267595, 1879708920318308, 2492861262121979),
                Y_minus_X = new FieldElement51(1185483484383269, 1356339572588553, 584932367316448, 102132779946470, 1792922621116791),
                XY2d = new FieldElement51(1966196870701923, 2230044620318636, 1425982460745905, 261167817826569, 46517743394330)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2358877405280588, 3136759755857592, 2279106683482647, 2224911448949389, 3216151871930471),
                Y_minus_X = new FieldElement51(1730194207717538, 431790042319772, 1831515233279467, 1372080552768581, 1074513929381760),
                XY2d = new FieldElement51(1450880638731607, 1019861580989005, 1229729455116861, 1174945729836143, 826083146840706)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1899935429242705, 1602068751520477, 940583196550370, 2334230882739107, 1540863155745695),
                Y_minus_X = new FieldElement51(2136688454840028, 2099509000964294, 1690800495246475, 1217643678575476, 828720645084218),
                XY2d = new FieldElement51(765548025667841, 462473984016099, 998061409979798, 546353034089527, 2212508972466858)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2298375097456408, 3144370785258318, 1281983193144089, 1491520128287375, 75847005908304),
                Y_minus_X = new FieldElement51(1801436127943107, 1734436817907890, 1268728090345068, 167003097070711, 2233597765834956),
                XY2d = new FieldElement51(1997562060465113, 1048700225534011, 7615603985628, 1855310849546841, 2242557647635213)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1161017320376250, 2744424393854291, 2169815802355236, 3228296595417790, 1770879511019628),
                Y_minus_X = new FieldElement51(1357044908364776, 729130645262438, 1762469072918979, 1365633616878458, 181282906404941),
                XY2d = new FieldElement51(1080413443139865, 1155205815510486, 1848782073549786, 622566975152580, 124965574467971)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1184526762066993, 247622751762817, 2943928830891604, 3071818503097743, 2188697339828084),
                Y_minus_X = new FieldElement51(2020536369003019, 202261491735136, 1053169669150884, 2056531979272544, 778165514694311),
                XY2d = new FieldElement51(237404399610207, 1308324858405118, 1229680749538400, 720131409105291, 1958958863624906)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2767383321724075, 2269456792542436, 1717918437373988, 1568052070792483, 2298775616809171),
                Y_minus_X = new FieldElement51(281527309158085, 36970532401524, 866906920877543, 2222282602952734, 1289598729589882),
                XY2d = new FieldElement51(1278207464902042, 494742455008756, 1262082121427081, 1577236621659884, 1888786707293291)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(353042527954210, 1830056151907359, 1111731275799225, 2426760769524072, 404312815582674),
                Y_minus_X = new FieldElement51(2064251142068628, 1666421603389706, 1419271365315441, 468767774902855, 191535130366583),
                XY2d = new FieldElement51(1716987058588002, 1859366439773457, 1767194234188234, 64476199777924, 1117233614485261)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3236091949205521, 2386938060636506, 2220652137473166, 1722843421165029, 2442282371698157),
                Y_minus_X = new FieldElement51(298845952651262, 1166086588952562, 1179896526238434, 1347812759398693, 1412945390096208),
                XY2d = new FieldElement51(1143239552672925, 906436640714209, 2177000572812152, 2075299936108548, 325186347798433)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2972824668060020, 2936287674948563, 3625238557779406, 2193186935276994, 1387043709851261),
                Y_minus_X = new FieldElement51(418098668140962, 715065997721283, 1471916138376055, 2168570337288357, 937812682637044),
                XY2d = new FieldElement51(1043584187226485, 2143395746619356, 2209558562919611, 482427979307092, 847556718384018)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1248731221520740, 1465200936117687, 2792603306395388, 2304778448366139, 2513234303861356),
                Y_minus_X = new FieldElement51(1057329623869501, 620334067429122, 461700859268034, 2012481616501857, 297268569108938),
                XY2d = new FieldElement51(1055352180870759, 1553151421852298, 1510903185371259, 1470458349428097, 1226259419062731)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3744788603986897, 3042126439258578, 3441906842094992, 3641194565844440, 3872208010289441),
                Y_minus_X = new FieldElement51(47000654413729, 1004754424173864, 1868044813557703, 173236934059409, 588771199737015),
                XY2d = new FieldElement51(30498470091663, 1082245510489825, 576771653181956, 806509986132686, 1317634017056939)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2672107869436803, 3745154677001249, 2417006535213335, 4136645508605033, 2065456951573058),
                Y_minus_X = new FieldElement51(1115636332012334, 1854340990964155, 83792697369514, 1972177451994021, 457455116057587),
                XY2d = new FieldElement51(1698968457310898, 1435137169051090, 1083661677032510, 938363267483709, 340103887207182)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1995325341336555, 911500251774648, 2415810569088940, 855378419194761, 3825401211214090),
                Y_minus_X = new FieldElement51(241719380661528, 310028521317150, 1215881323380194, 1408214976493624, 2141142156467363),
                XY2d = new FieldElement51(1315157046163473, 727368447885818, 1363466668108618, 1668921439990361, 1398483384337907)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2326829491984875, 3267188020145720, 1849729037055211, 4191614430138232, 2696204044080201),
                Y_minus_X = new FieldElement51(2053597130993710, 2024431685856332, 2233550957004860, 2012407275509545, 872546993104440),
                XY2d = new FieldElement51(1217269667678610, 599909351968693, 1390077048548598, 1471879360694802, 739586172317596)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3970118453066023, 1560510726633957, 3156262694845170, 1418028351780051, 2346204163137185),
                Y_minus_X = new FieldElement51(2132502667405250, 214379346175414, 1502748313768060, 1960071701057800, 1353971822643138),
                XY2d = new FieldElement51(319394212043702, 2127459436033571, 717646691535162, 663366796076914, 318459064945314)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2657789238608841, 1960452633787082, 2919148848086913, 3744474074452359, 1451061489880786),
                Y_minus_X = new FieldElement51(947085906234007, 323284730494107, 1485778563977200, 728576821512394, 901584347702286),
                XY2d = new FieldElement51(1575783124125742, 2126210792434375, 1569430791264065, 1402582372904727, 1891780248341114)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3090232019245924, 4249503325136911, 3270591693593114, 1662001808174330, 2330127946643001),
                Y_minus_X = new FieldElement51(739152638255629, 2074935399403557, 505483666745895, 1611883356514088, 628654635394878),
                XY2d = new FieldElement51(1822054032121349, 643057948186973, 7306757352712, 577249257962099, 284735863382083)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(3618358370049178, 1448606567552085, 3730680834630016, 2417602993041145, 1115718458123497),
                Y_minus_X = new FieldElement51(204146226972102, 1630511199034723, 2215235214174763, 174665910283542, 956127674017216),
                XY2d = new FieldElement51(1562934578796716, 1070893489712745, 11324610642270, 958989751581897, 2172552325473805)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1770564423056008, 2987323445349813, 1326060113795288, 1509650369341127, 2317692235267932),
                Y_minus_X = new FieldElement51(623682558650637, 1337866509471512, 990313350206649, 1314236615762469, 1164772974270275),
                XY2d = new FieldElement51(223256821462517, 723690150104139, 1000261663630601, 933280913953265, 254872671543046)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1969087237026022, 2876595539132372, 1335555107635968, 2069986355593023, 3963899963027150),
                Y_minus_X = new FieldElement51(1236103475266979, 1837885883267218, 1026072585230455, 1025865513954973, 1801964901432134),
                XY2d = new FieldElement51(1115241013365517, 1712251818829143, 2148864332502771, 2096001471438138, 2235017246626125)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3551068012286861, 2047148477845620, 2165648650132450, 1612539282026145, 2765997725314138),
                Y_minus_X = new FieldElement51(118352772338543, 1067608711804704, 1434796676193498, 1683240170548391, 230866769907437),
                XY2d = new FieldElement51(1850689576796636, 1601590730430274, 1139674615958142, 1954384401440257, 76039205311)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1723387471374172, 3249101280723658, 2785727448808904, 2272728458379212, 1756575222802512),
                Y_minus_X = new FieldElement51(2146711623855116, 503278928021499, 625853062251406, 1109121378393107, 1033853809911861),
                XY2d = new FieldElement51(571005965509422, 2005213373292546, 1016697270349626, 56607856974274, 914438579435146)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1346698876211176, 2076651707527589, 3336561384795453, 2517134292513653, 1068954492309670),
                Y_minus_X = new FieldElement51(1769967932677654, 1695893319756416, 1151863389675920, 1781042784397689, 400287774418285),
                XY2d = new FieldElement51(1851867764003121, 403841933237558, 820549523771987, 761292590207581, 1743735048551143)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(410915148140008, 2107072311871739, 3256167275561751, 2351484709082008, 1180818713503223),
                Y_minus_X = new FieldElement51(285945406881439, 648174397347453, 1098403762631981, 1366547441102991, 1505876883139217),
                XY2d = new FieldElement51(672095903120153, 1675918957959872, 636236529315028, 1569297300327696, 2164144194785875)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1902708175321798, 3287143344600686, 1178560808893262, 2552895497743394, 1280977479761117),
                Y_minus_X = new FieldElement51(1615357281742403, 404257611616381, 2160201349780978, 1160947379188955, 1578038619549541),
                XY2d = new FieldElement51(2013087639791217, 822734930507457, 1785668418619014, 1668650702946164, 389450875221715)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2705718263383616, 2358206633614248, 2072540975937134, 308588860670238, 1304394580755385),
                Y_minus_X = new FieldElement51(1295082798350326, 2091844511495996, 1851348972587817, 3375039684596, 789440738712837),
                XY2d = new FieldElement51(2083069137186154, 848523102004566, 993982213589257, 1405313299916317, 1532824818698468)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3747761112537659, 1397203457344778, 4026750030752190, 2391102557240943, 2318403398028034),
                Y_minus_X = new FieldElement51(1782411379088302, 1096724939964781, 27593390721418, 542241850291353, 1540337798439873),
                XY2d = new FieldElement51(693543956581437, 171507720360750, 1557908942697227, 1074697073443438, 1104093109037196)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(345288228393400, 3351443383432420, 2386681722088990, 1740551994106739, 2500011992985018),
                Y_minus_X = new FieldElement51(231429562203065, 1526290236421172, 2021375064026423, 1520954495658041, 806337791525116),
                XY2d = new FieldElement51(1079623667189886, 872403650198613, 766894200588288, 2163700860774109, 2023464507911816)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(854645372543796, 1936406001954827, 2403260476226501, 3077125552956802, 1554306377287555),
                Y_minus_X = new FieldElement51(1497138821904622, 1044820250515590, 1742593886423484, 1237204112746837, 849047450816987),
                XY2d = new FieldElement51(667962773375330, 1897271816877105, 1399712621683474, 1143302161683099, 2081798441209593)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2378947665252234, 1936114012888109, 1704424366552046, 3108474694401560, 2968403435020606),
                Y_minus_X = new FieldElement51(1072409664800960, 2146937497077528, 1508780108920651, 935767602384853, 1112800433544068),
                XY2d = new FieldElement51(333549023751292, 280219272863308, 2104176666454852, 1036466864875785, 536135186520207)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2625466093568366, 2398257055215356, 2555916080813104, 2667888562832962, 3510376944868638),
                Y_minus_X = new FieldElement51(1186115062588401, 2251609796968486, 1098944457878953, 1153112761201374, 1791625503417267),
                XY2d = new FieldElement51(1870078460219737, 2129630962183380, 852283639691142, 292865602592851, 401904317342226)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1361070124828016, 815664541425524, 3278598711049919, 1951790935390646, 2807674705520038),
                Y_minus_X = new FieldElement51(1546301003424277, 459094500062839, 1097668518375311, 1780297770129643, 720763293687608),
                XY2d = new FieldElement51(1212405311403990, 1536693382542438, 61028431067459, 1863929423417129, 1223219538638038)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1294303766540260, 3435357279640341, 3134071170918340, 2315654383110622, 2213283684565086),
                Y_minus_X = new FieldElement51(339050984211414, 601386726509773, 413735232134068, 966191255137228, 1839475899458159),
                XY2d = new FieldElement51(235605972169408, 2174055643032978, 1538335001838863, 1281866796917192, 1815940222628465)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1632352921721536, 1833328609514701, 2092779091951987, 4175756015558474, 2210068022482918),
                Y_minus_X = new FieldElement51(35271216625062, 1712350667021807, 983664255668860, 98571260373038, 1232645608559836),
                XY2d = new FieldElement51(1998172393429622, 1798947921427073, 784387737563581, 1589352214827263, 1589861734168180)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1733739258725305, 2283515530744786, 2453769758904107, 3243892858242237, 1194308773174555),
                Y_minus_X = new FieldElement51(846415389605137, 746163495539180, 829658752826080, 592067705956946, 957242537821393),
                XY2d = new FieldElement51(1758148849754419, 619249044817679, 168089007997045, 1371497636330523, 1867101418880350)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2578433797894864, 2513559319756263, 1700682323676192, 1577907266349064, 3469447477068264),
                Y_minus_X = new FieldElement51(1714182387328607, 1477856482074168, 574895689942184, 2159118410227270, 1555532449716575),
                XY2d = new FieldElement51(853828206885131, 998498946036955, 1835887550391235, 207627336608048, 258363815956050)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2392941288336925, 3488528558590503, 2894901233585134, 1646615130509172, 1208239602291765),
                Y_minus_X = new FieldElement51(1501663228068911, 1354879465566912, 1444432675498247, 897812463852601, 855062598754348),
                XY2d = new FieldElement51(714380763546606, 1032824444965790, 1774073483745338, 1063840874947367, 1738680636537158)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1640635546696233, 2884968766877360, 2212651044092395, 2282390772269100, 2620315074574625),
                Y_minus_X = new FieldElement51(1171650314802029, 1567085444565577, 1453660792008405, 757914533009261, 1619511342778196),
                XY2d = new FieldElement51(420958967093237, 971103481109486, 2169549185607107, 1301191633558497, 1661514101014240)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3158923465503550, 1332556122804145, 4075855067109735, 3619414031128206, 1982558335973171),
                Y_minus_X = new FieldElement51(1121533090144639, 1021251337022187, 110469995947421, 1511059774758394, 2110035908131662),
                XY2d = new FieldElement51(303213233384524, 2061932261128138, 352862124777736, 40828818670255, 249879468482660)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(856559257852200, 2760317478634258, 3629993581580163, 3975258940632376, 1962275756614520),
                Y_minus_X = new FieldElement51(1445691340537320, 40614383122127, 402104303144865, 485134269878232, 1659439323587426),
                XY2d = new FieldElement51(20057458979482, 1183363722525800, 2140003847237215, 2053873950687614, 2112017736174909)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2228654250927986, 3735391177100515, 1368661293910955, 3328311098862539, 526650682059607),
                Y_minus_X = new FieldElement51(709481497028540, 531682216165724, 316963769431931, 1814315888453765, 258560242424104),
                XY2d = new FieldElement51(1053447823660455, 1955135194248683, 1010900954918985, 1182614026976701, 1240051576966610)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1957943897155478, 1788667368028035, 2389492723714354, 2252839333292309, 3078204576998275),
                Y_minus_X = new FieldElement51(1848942433095597, 1582009882530495, 1849292741020143, 1068498323302788, 2001402229799484),
                XY2d = new FieldElement51(1528282417624269, 2142492439828191, 2179662545816034, 362568973150328, 1591374675250271)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2411826493119617, 2484141002903963, 2149181472355544, 598041771119831, 2435658815595421),
                Y_minus_X = new FieldElement51(2013278155187349, 662660471354454, 793981225706267, 411706605985744, 804490933124791),
                XY2d = new FieldElement51(2051892037280204, 488391251096321, 2230187337030708, 930221970662692, 679002758255210)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1530723630438670, 875873929577927, 2593359947955236, 2701702933216000, 1055551308214178),
                Y_minus_X = new FieldElement51(1461835919309432, 1955256480136428, 180866187813063, 1551979252664528, 557743861963950),
                XY2d = new FieldElement51(359179641731115, 1324915145732949, 902828372691474, 294254275669987, 1887036027752957)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(4295071423139571, 2038225437857463, 1317528426475850, 1398989128982787, 2027639881006861),
                Y_minus_X = new FieldElement51(2072902725256516, 312132452743412, 309930885642209, 996244312618453, 1590501300352303),
                XY2d = new FieldElement51(1397254305160710, 695734355138021, 2233992044438756, 1776180593969996, 1085588199351115)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2692366865016258, 2506694600041928, 2745669038615469, 1556322069683365, 3819256354004466),
                Y_minus_X = new FieldElement51(1950722461391320, 1907845598854797, 1822757481635527, 2121567704750244, 73811931471221),
                XY2d = new FieldElement51(387139307395758, 2058036430315676, 1220915649965325, 1794832055328951, 1230009312169328)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1765973779329498, 2911143873132225, 2271621715291913, 3553728154996461, 3368065817761132),
                Y_minus_X = new FieldElement51(1127572801181483, 1224743760571696, 1276219889847274, 1529738721702581, 1589819666871853),
                XY2d = new FieldElement51(2181229378964934, 2190885205260020, 1511536077659137, 1246504208580490, 668883326494241)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2689666469258543, 2920826224880015, 2333696811665585, 523874406393177, 2496851874620484),
                Y_minus_X = new FieldElement51(1975438052228868, 1071801519999806, 594652299224319, 1877697652668809, 1489635366987285),
                XY2d = new FieldElement51(958592545673770, 233048016518599, 851568750216589, 567703851596087, 1740300006094761)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2014540178270324, 192672779514432, 2465676996326778, 2194819933853410, 1716422829364835),
                Y_minus_X = new FieldElement51(1540769606609725, 2148289943846077, 1597804156127445, 1230603716683868, 815423458809453),
                XY2d = new FieldElement51(1738560251245018, 1779576754536888, 1783765347671392, 1880170990446751, 1088225159617541)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2911103727614740, 1956447718227572, 1830568515922666, 3092868863429656, 1669607124206367),
                Y_minus_X = new FieldElement51(1143465490433355, 1532194726196059, 1093276745494697, 481041706116088, 2121405433561163),
                XY2d = new FieldElement51(1686424298744462, 1451806974487153, 266296068846582, 1834686947542675, 1720762336132256)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3141016840074207, 3295090436969907, 3107924901237156, 1669272323124635, 1603340330827879),
                Y_minus_X = new FieldElement51(1206396181488998, 333158148435054, 1402633492821422, 1120091191722026, 1945474114550509),
                XY2d = new FieldElement51(766720088232571, 1512222781191002, 1189719893490790, 2091302129467914, 2141418006894941)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2671463460991841, 1998875112167986, 3678399683938955, 3406728169064757, 2738338345823434),
                Y_minus_X = new FieldElement51(938160078005954, 1421776319053174, 1941643234741774, 180002183320818, 1414380336750546),
                XY2d = new FieldElement51(398001940109652, 1577721237663248, 1012748649830402, 1540516006905144, 1011684812884559)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1653276489969611, 2257881638852872, 1921777941170835, 1604139841794531, 3113010867325889),
                Y_minus_X = new FieldElement51(996661541407379, 1455877387952927, 744312806857277, 139213896196746, 1000282908547789),
                XY2d = new FieldElement51(1450817495603008, 1476865707053229, 1030490562252053, 620966950353376, 1744760161539058)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2811528223687828, 2288856475326432, 2038622963352005, 1637244893271723, 3278365165924196),
                Y_minus_X = new FieldElement51(962165956135846, 1116599660248791, 182090178006815, 1455605467021751, 196053588803284),
                XY2d = new FieldElement51(796863823080135, 1897365583584155, 420466939481601, 2165972651724672, 932177357788289)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(877047233620613, 1375632631944375, 2895573425567369, 2911822552533124, 2271153746017078),
                Y_minus_X = new FieldElement51(2216943882299338, 394841323190322, 2222656898319671, 558186553950529, 1077236877025190),
                XY2d = new FieldElement51(801118384953213, 1914330175515892, 574541023311511, 1471123787903705, 1526158900256288)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3201417702772463, 2207116611267330, 3164719852826535, 2752958352884036, 2314162374456719),
                Y_minus_X = new FieldElement51(1474518386765335, 1760793622169197, 1157399790472736, 1622864308058898, 165428294422792),
                XY2d = new FieldElement51(1961673048027128, 102619413083113, 1051982726768458, 1603657989805485, 1941613251499678)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1401939116319247, 2587106153588320, 2323846009771033, 862423201496005, 3102318568216632),
                Y_minus_X = new FieldElement51(1234706593321979, 1083343891215917, 898273974314935, 1640859118399498, 157578398571149),
                XY2d = new FieldElement51(1143483057726416, 1992614991758919, 674268662140796, 1773370048077526, 674318359920189)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1835401379538542, 173900035308392, 818247630716732, 4013900225838034, 1021506399448290),
                Y_minus_X = new FieldElement51(1506632088156630, 2127481795522179, 513812919490255, 140643715928370, 442476620300318),
                XY2d = new FieldElement51(2056683376856736, 219094741662735, 2193541883188309, 1841182310235800, 556477468664293)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3566819241596075, 1049075855992602, 4318372866671791, 2518704280870781, 2040482348591519),
                Y_minus_X = new FieldElement51(94096246544434, 922482381166992, 24517828745563, 2139430508542503, 2097139044231004),
                XY2d = new FieldElement51(537697207950515, 1399352016347350, 1563663552106345, 2148749520888918, 549922092988516)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1747985413252415, 680511052635695, 1809559829982725, 2846074064615302, 2453472984431229),
                Y_minus_X = new FieldElement51(323583936109569, 1973572998577657, 1192219029966558, 79354804385273, 1374043025560347),
                XY2d = new FieldElement51(213277331329947, 416202017849623, 1950535221091783, 1313441578103244, 2171386783823658)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2440888617915079, 993969372859109, 3147669935222235, 3799101348983503, 1477373024911349),
                Y_minus_X = new FieldElement51(1620578418245010, 541035331188469, 2235785724453865, 2154865809088198, 1974627268751826),
                XY2d = new FieldElement51(1346805451740245, 1350981335690626, 942744349501813, 2155094562545502, 1012483751693409)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2107080134091762, 1132567062788208, 1824935377687210, 769194804343737, 1857941799971888),
                Y_minus_X = new FieldElement51(1074666112436467, 249279386739593, 1174337926625354, 1559013532006480, 1472287775519121),
                XY2d = new FieldElement51(1872620123779532, 1892932666768992, 1921559078394978, 1270573311796160, 1438913646755037)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3089190001333428, 3264053113908846, 989780015893986, 1351393287739814, 2580427560230798),
                Y_minus_X = new FieldElement51(1028328827183114, 1711043289969857, 1350832470374933, 1923164689604327, 1495656368846911),
                XY2d = new FieldElement51(1900828492104143, 430212361082163, 687437570852799, 832514536673512, 1685641495940794)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3094432661621646, 605670026766215, 290836444839585, 2415010588577604, 2213815011799644),
                Y_minus_X = new FieldElement51(1176336383453996, 1725477294339771, 12700622672454, 678015708818208, 162724078519879),
                XY2d = new FieldElement51(1448049969043497, 1789411762943521, 385587766217753, 90201620913498, 832999441066823)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2767886146978542, 2240508292484615, 3603469341851756, 3475055379001735, 3002035638112385),
                Y_minus_X = new FieldElement51(1263624896582495, 1102602401673328, 526302183714372, 2152015839128799, 1483839308490010),
                XY2d = new FieldElement51(442991718646863, 1599275157036458, 1925389027579192, 899514691371390, 350263251085160)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(1689713572022124, 2845654372939621, 3229894858477217, 1985127338729498, 3927868934032873),
                Y_minus_X = new FieldElement51(1557207018622683, 340631692799603, 1477725909476187, 614735951619419, 2033237123746766),
                XY2d = new FieldElement51(968764929340557, 1225534776710944, 662967304013036, 1155521416178595, 791142883466590)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1487081286167458, 3244839255500182, 1792378982844639, 2950452258685122, 2153908693179753),
                Y_minus_X = new FieldElement51(1123181311102823, 685575944875442, 507605465509927, 1412590462117473, 568017325228626),
                XY2d = new FieldElement51(560258797465417, 2193971151466401, 1824086900849026, 579056363542056, 1690063960036441)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1918407319222397, 2605567366745211, 1930426334528098, 1564816146005724, 4113142195393344),
                Y_minus_X = new FieldElement51(2131325168777276, 1176636658428908, 1756922641512981, 1390243617176012, 1966325177038383),
                XY2d = new FieldElement51(2063958120364491, 2140267332393533, 699896251574968, 273268351312140, 375580724713232)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2024297515263178, 2668759143407935, 3330814048702549, 2423412039258430, 1031677520051052),
                Y_minus_X = new FieldElement51(2033900009388450, 1744902869870788, 2190580087917640, 1949474984254121, 231049754293748),
                XY2d = new FieldElement51(343868674606581, 550155864008088, 1450580864229630, 481603765195050, 896972360018042)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2151139328380127, 2566545695770176, 2311556639460451, 1676664391494650, 2048348075599360),
                Y_minus_X = new FieldElement51(1528930066340597, 1605003907059576, 1055061081337675, 1458319101947665, 1234195845213142),
                XY2d = new FieldElement51(830430507734812, 1780282976102377, 1425386760709037, 362399353095425, 2168861579799910)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3407562046415562, 980662895504005, 2053766700883521, 2742766027762854, 2762205690726604),
                Y_minus_X = new FieldElement51(1683750316716132, 652278688286128, 1221798761193539, 1897360681476669, 319658166027343),
                XY2d = new FieldElement51(618808732869972, 72755186759744, 2060379135624181, 1730731526741822, 48862757828238)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3714971784278753, 3394840525452699, 614590986558882, 1409210575145591, 1882816996436803),
                Y_minus_X = new FieldElement51(2230133264691131, 563950955091024, 2042915975426398, 827314356293472, 672028980152815),
                XY2d = new FieldElement51(264204366029760, 1654686424479449, 2185050199932931, 2207056159091748, 506015669043634)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1784446333136550, 1973746527984364, 334856327359575, 3408569589569858, 3275749938360725),
                Y_minus_X = new FieldElement51(2065270940578383, 31477096270353, 306421879113491, 181958643936686, 1907105536686083),
                XY2d = new FieldElement51(1496516440779464, 1748485652986458, 872778352227340, 818358834654919, 97932669284220)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2723435829455580, 2924255216478824, 1804995246884102, 1842309243470804, 3753662318666930),
                Y_minus_X = new FieldElement51(1013216974933691, 538921919682598, 1915776722521558, 1742822441583877, 1886550687916656),
                XY2d = new FieldElement51(2094270000643336, 303971879192276, 40801275554748, 649448917027930, 1818544418535447)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2241737709499146, 549397817447461, 838180519319392, 1725686958520781, 3957438894582995),
                Y_minus_X = new FieldElement51(1216074541925116, 50120933933509, 1565829004133810, 721728156134580, 349206064666188),
                XY2d = new FieldElement51(948617110470858, 346222547451945, 1126511960599975, 1759386906004538, 493053284802266)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1454933046815146, 3126495827951610, 1467170975468587, 1432316382418897, 2111710746366763),
                Y_minus_X = new FieldElement51(2105387117364450, 1996463405126433, 1303008614294500, 851908115948209, 1353742049788635),
                XY2d = new FieldElement51(750300956351719, 1487736556065813, 15158817002104, 1511998221598392, 971739901354129)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1874648163531674, 2124487685930551, 1810030029384882, 918400043048335, 2838148440985898),
                Y_minus_X = new FieldElement51(1235084464747900, 1166111146432082, 1745394857881591, 1405516473883040, 4463504151617),
                XY2d = new FieldElement51(1663810156463827, 327797390285791, 1341846161759410, 1964121122800605, 1747470312055380)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(660005247548214, 2071860029952887, 3610548013635355, 911703252219106, 3266179736709079),
                Y_minus_X = new FieldElement51(2206641276178231, 1690587809721504, 1600173622825126, 2156096097634421, 1106822408548216),
                XY2d = new FieldElement51(1344788193552206, 1949552134239140, 1735915881729557, 675891104100469, 1834220014427292)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1920949492387945, 2410685102072778, 2322108077349280, 2877838278583064, 3719881539786256),
                Y_minus_X = new FieldElement51(622221042073383, 1210146474039168, 1742246422343683, 1403839361379025, 417189490895736),
                XY2d = new FieldElement51(22727256592983, 168471543384997, 1324340989803650, 1839310709638189, 504999476432775)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3565040332441556, 1721896294296941, 2304063388272514, 2065069734239231, 3056710287109878),
                Y_minus_X = new FieldElement51(1337466662091884, 1287645354669772, 2018019646776184, 652181229374245, 898011753211715),
                XY2d = new FieldElement51(1969792547910734, 779969968247557, 2011350094423418, 1823964252907487, 1058949448296945)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2459143550747250, 1118176942430252, 3010694408233412, 806764629546265, 1157700123092949),
                Y_minus_X = new FieldElement51(1273565321399022, 1638509681964574, 759235866488935, 666015124346707, 897983460943405),
                XY2d = new FieldElement51(1717263794012298, 1059601762860786, 1837819172257618, 1054130665797229, 680893204263559)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2237039662793603, 2249022333361206, 2058613546633703, 2401253908530527, 2215176649164581),
                Y_minus_X = new FieldElement51(79472182719605, 1851130257050174, 1825744808933107, 821667333481068, 781795293511946),
                XY2d = new FieldElement51(755822026485370, 152464789723500, 1178207602290608, 410307889503239, 156581253571278)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3669985309815545, 2736319981413860, 3898537095128197, 3653287498355512, 1349185550126960),
                Y_minus_X = new FieldElement51(1495380034400429, 325049476417173, 46346894893933, 1553408840354856, 828980101835683),
                XY2d = new FieldElement51(1280337889310282, 2070832742866672, 1640940617225222, 2098284908289951, 450929509534434)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2659503167684029, 2378371955168899, 2537839641198868, 1999255076709337, 2030511179441770),
                Y_minus_X = new FieldElement51(1254958221100483, 1153235960999843, 942907704968834, 637105404087392, 1149293270147267),
                XY2d = new FieldElement51(894249020470196, 400291701616810, 406878712230981, 1599128793487393, 1145868722604026)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3749755063888563, 2361916158338507, 1128535642171975, 1900106496009660, 2381592531146157),
                Y_minus_X = new FieldElement51(452487513298665, 1352120549024569, 1173495883910956, 1999111705922009, 367328130454226),
                XY2d = new FieldElement51(1717539401269642, 1475188995688487, 891921989653942, 836824441505699, 1885988485608364)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3493583935107776, 2439136865632830, 3370281625921440, 2680547565621609, 2282158712612572),
                Y_minus_X = new FieldElement51(2022432361201842, 1088816090685051, 1977843398539868, 1854834215890724, 564238862029357),
                XY2d = new FieldElement51(938868489100585, 1100285072929025, 1017806255688848, 1957262154788833, 152787950560442)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3119119231364171, 2872271776627789, 2477832016990963, 2593801257642876, 1761675818237335),
                Y_minus_X = new FieldElement51(1295072362439987, 931227904689414, 1355731432641687, 922235735834035, 892227229410209),
                XY2d = new FieldElement51(1680989767906154, 535362787031440, 2136691276706570, 1942228485381244, 1267350086882274)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2617818047455756, 2684460443440843, 2378209521329782, 1973842949591661, 2897427157127624),
                Y_minus_X = new FieldElement51(535509430575217, 546885533737322, 1524675609547799, 2138095752851703, 1260738089896827),
                XY2d = new FieldElement51(1159906385590467, 2198530004321610, 714559485023225, 81880727882151, 1484020820037082)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1377485731340769, 2046328105512000, 1802058637158797, 2313945950453421, 1356993908853900),
                Y_minus_X = new FieldElement51(2013612215646735, 1830770575920375, 536135310219832, 609272325580394, 270684344495013),
                XY2d = new FieldElement51(1237542585982777, 2228682050256790, 1385281931622824, 593183794882890, 493654978552689)
            } } },
                new LookupTable {affineNielsPoints = new AffineNielsPoint[] { new AffineNielsPoint {
                Y_plus_X = new FieldElement51(2299141301692989, 1891414891220256, 983894663308928, 2427961581972066, 3378060928864955),
                Y_minus_X = new FieldElement51(1694030170963455, 502038567066200, 1691160065225467, 949628319562187, 275110186693066),
                XY2d = new FieldElement51(1124515748676336, 1661673816593408, 1499640319059718, 1584929449166988, 558148594103306)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(1784525599998356, 1619698033617383, 2097300287550715, 2510065271789004, 1905684794832757),
                Y_minus_X = new FieldElement51(1288941072872766, 931787902039402, 190731008859042, 2006859954667190, 1005931482221702),
                XY2d = new FieldElement51(1465551264822703, 152905080555927, 680334307368453, 173227184634745, 666407097159852)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2111017076203943, 3630560299479595, 1248583954016455, 3604089008549670, 1895180776543895),
                Y_minus_X = new FieldElement51(171348223915638, 662766099800389, 462338943760497, 466917763340314, 656911292869115),
                XY2d = new FieldElement51(488623681976577, 866497561541722, 1708105560937768, 1673781214218839, 1506146329818807)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2412225278142205, 950394373239688, 2682296937026182, 711676555398831, 320964687779005),
                Y_minus_X = new FieldElement51(988979367990485, 1359729327576302, 1301834257246029, 294141160829308, 29348272277475),
                XY2d = new FieldElement51(1434382743317910, 100082049942065, 221102347892623, 186982837860588, 1305765053501834)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(2205916462268190, 2751663643476068, 961960554686615, 2409862576442233, 1841471168298304),
                Y_minus_X = new FieldElement51(1191737341426592, 1847042034978363, 1382213545049056, 1039952395710448, 788812858896859),
                XY2d = new FieldElement51(1346965964571152, 1291881610839830, 2142916164336056, 786821641205979, 1571709146321039)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(787164375951248, 2454669019058437, 3608390234717387, 1431233331032509, 786341368775957),
                Y_minus_X = new FieldElement51(492448143532951, 304105152670757, 1761767168301056, 233782684697790, 1981295323106089),
                XY2d = new FieldElement51(665807507761866, 1343384868355425, 895831046139653, 439338948736892, 1986828765695105)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3007896024559801, 1721699973539148, 2510565115413133, 1390588532210644, 1212530909934781),
                Y_minus_X = new FieldElement51(852891097972275, 1816988871354562, 1543772755726524, 1174710635522444, 202129090724628),
                XY2d = new FieldElement51(1205281565824323, 22430498399418, 992947814485516, 1392458699738672, 688441466734558)
            }, new AffineNielsPoint{
                Y_plus_X = new FieldElement51(3302427242100220, 1955849529137134, 2171162376368357, 2343545681983462, 447733118757825),
                Y_minus_X = new FieldElement51(1287181461435438, 622722465530711, 880952150571872, 741035693459198, 311565274989772),
                XY2d = new FieldElement51(1003649078149734, 545233927396469, 1849786171789880, 1318943684880434, 280345687170552)
            } } }
            }
        };
    }
}
